Sudahkah saya melewatkan panggilan API standar yang menghilangkan nol yang tertinggal dari nomor?
Ex.
var x = 1.234000 // to become 1.234;
var y = 1.234001; // stays 1.234001
Number.toFixed () dan Number.toPrecision () tidak cukup seperti yang saya cari.
javascript
regex
math
numbers
Steven
sumber
sumber
1.234000 === 1.234
,.parseFloat(n)
?Jawaban:
Jika Anda mengonversinya menjadi string, string itu tidak akan menampilkan angka nol tambahan apa pun, yang tidak disimpan dalam variabel sejak pertama kali dibuat sebagai Angka, bukan String.
sumber
var n = 1.245000000000001
(dengan asumsi itu tidak signifikan untuk diwakili kepada pengguna)Saya memiliki contoh serupa di mana saya ingin menggunakan di
.toFixed()
mana perlu, tetapi saya tidak ingin padding padahal tidak. Jadi saya akhirnya menggunakan parseFloat bersamaan dengan toFixed.toFixed tanpa bantalan
Opsi lain yang melakukan hal yang hampir sama.
Jawaban ini dapat membantu keputusan Anda
toFixed
akan membulatkan / menempelkan angka ke panjang tertentu, tetapi juga mengubahnya menjadi string. Mengubah itu kembali ke tipe numerik tidak hanya akan membuat angka lebih aman untuk digunakan secara aritmatika, tetapi juga secara otomatis menghapus setiap 0 yang tertinggal. Sebagai contoh:Karena bahkan jika Anda menentukan angka dengan nol di belakangnya, angka itu dijatuhkan.
sumber
parseFloat(n).toFixed(4);
bukannya jawaban Anda yang sebenarnya. Maafkan saya.+(n.toFixed(4))
?Saya pertama kali menggunakan kombinasi jawaban matti-lyra dan gary:
Hasil:
Kasus yang agak bermasalah adalah 0,10001. Saya akhirnya menggunakan versi yang lebih panjang ini:
Pembaruan : Dan ini adalah versi terbaru Gary (lihat komentar):
Ini memberikan hasil yang sama seperti di atas.
sumber
toFixed(4).replace(/([0-9]+(\.[1-9]+)?)(\.?0+$)/,"$1")
([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)
replace(/[,.][1-9]+(0+)/,'')
?The
toFixed
Metode akan melakukan pembulatan sesuai jika diperlukan. Ini juga akan menambahkan nol trailing, yang tidak selalu ideal.Jika Anda memasukkan nilai kembali ke angka, angka nol yang tertinggal tersebut akan turun. Ini adalah pendekatan yang lebih sederhana daripada melakukan pembulatan atau penghentian matematika Anda sendiri.
sumber
toFixed
panggilan). itu kasus tepi UX yang aneh.Saya memiliki persyaratan yang pada dasarnya sama, dan menemukan bahwa tidak ada mekanisme bawaan untuk fungsi ini.
Selain memotong nol trailing, saya juga harus membulatkan dan memformat output untuk lokal pengguna saat ini (yaitu 123.456.789).
Semua pekerjaan saya tentang ini telah dimasukkan sebagai prettyFloat.js (Berlisensi MIT) di GitHub: https://github.com/dperish/prettyFloat.js
Contoh Penggunaan:
Diperbarui - Agustus 2018
Semua browser modern sekarang mendukung API Internasionalisasi ECMAScript , yang menyediakan perbandingan string yang peka bahasa, pemformatan angka, dan pemformatan tanggal dan waktu.
Untuk browser yang lebih lama, Anda dapat menggunakan polyfill ini: https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en
sumber
Bagaimana kalau hanya mengalikan dengan yang seperti ini?
sumber
Anda dapat mencoba yang ini untuk mengurangi angka mengambang
sumber
Jawaban regex murni
Saya heran mengapa tidak ada yang memberi!
sumber
Saya perlu menyelesaikan masalah ini juga ketika Django menampilkan nilai tipe desimal dalam bidang teks. Misalnya kapan '1' adalah nilainya. Itu akan menampilkan '1,00000000'. Jika '1.23' adalah nilainya, itu akan menampilkan '1.23000000' (Dalam kasus pengaturan 'decimal_places' dari 8)
Menggunakan parseFloat bukan pilihan bagi saya karena mungkin itu tidak mengembalikan nilai yang sama persis. toFixed bukan pilihan karena saya tidak ingin membulatkan apa pun, jadi saya membuat fungsi:
sumber
Tak satu pun dari solusi ini bekerja untuk saya untuk jumlah yang sangat kecil. http://numeraljs.com/ memecahkan ini untuk saya.
sumber
Jika Anda tidak dapat menggunakan Floats karena alasan apa pun (seperti float-uang yang terlibat) dan sudah mulai dari string yang mewakili angka yang benar, Anda dapat menemukan solusi ini berguna. Itu mengkonversi string yang mewakili angka ke string yang mewakili angka tanpa nol trailing.
sumber
Setelah membaca semua jawaban - dan komentar - saya berakhir dengan ini:
Saya tahu menggunakan
eval
bisa berbahaya, tetapi ini banyak membantu saya.Begitu:
Jika Anda ingin membatasi tempat desimal, gunakan
toFixed()
seperti yang ditunjukkan orang lain.Itu dia.
sumber
Saya perlu menghapus nol yang tertinggal tetapi menyimpan setidaknya 2 desimal, termasuk nol apa pun.
Angka yang saya kerjakan adalah 6 string angka desimal, dihasilkan oleh .toFixed (6).
Hasil yang diharapkan:
Larutan:
Logika:
Jalankan fungsi loop jika karakter string terakhir adalah nol.
Hapus karakter terakhir dan perbarui variabel string.
Jika karakter terakhir string yang diperbarui bukan nol, akhiri.
Jika string yang diperbarui karakter ketiga hingga terakhir adalah titik apung, akhiri.
sumber
Inilah solusi yang mungkin:
sumber
parseFloat()
akan jauh lebih tepat.