di JavaScript, cara umum untuk membulatkan angka ke N tempat desimal adalah seperti:
function roundNumber(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
Namun pendekatan ini akan membulatkan ke maksimum N tempat desimal sementara saya ingin selalu membulatkan ke N tempat desimal. Misalnya "2.0" akan dibulatkan menjadi "2".
Ada ide?
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/… ), tetapi bermasalah di IE: stackoverflow.com/questions/661562/… ; Anda harus menulis versi Anda sendiri ...Jawaban:
Itu bukan masalah pembulatan, itu masalah tampilan. Angka tidak berisi informasi tentang digit signifikan; nilai 2 sama dengan 2.0000000000000. Saat Anda mengubah nilai yang dibulatkan menjadi string, Anda membuatnya menampilkan sejumlah digit.
Anda bisa menambahkan angka nol setelah nomor tersebut, seperti:
(Perhatikan bahwa ini mengasumsikan bahwa pengaturan kawasan klien menggunakan titik sebagai pemisah desimal, kode memerlukan lebih banyak pekerjaan untuk berfungsi untuk pengaturan lain.)
sumber
toFixed()
desimal di akhir, setelah pembulatan?1.02449999998.toFixed(4)
kembali dengan benar1.0245
.Saya pikir ada pendekatan yang lebih sederhana untuk semua yang diberikan di sini, dan metodenya
Number.toFixed()
sudah diterapkan dalam JavaScript.cukup tulis:
dll ...
sumber
toFixed()
mengembalikan string.Saya menemukan cara. Ini adalah kode Christoph dengan perbaikan:
Baca detail pengulangan karakter menggunakan konstruktor array di sini jika Anda penasaran mengapa saya menambahkan "+ 1".
sumber
Selalu ada cara yang lebih baik untuk melakukan sesuatu.
Saya ingin mendapatkan presisi empat digit: 51,94
kerjakan saja:
hasilnya akan jadi: 51.94
sumber
Metode pembulatan seperti PHP
Kode di bawah ini dapat digunakan untuk menambahkan versi Math.round Anda sendiri ke namespace Anda yang menggunakan parameter presisi. Tidak seperti pembulatan Desimal pada contoh di atas, ini tidak melakukan konversi ke dan dari string, dan parameter presisi bekerja dengan cara yang sama seperti PHP dan Excel di mana 1 positif akan dibulatkan ke 1 tempat desimal dan -1 akan dibulatkan ke puluhan.
dari referensi Pengembang Mozilla untuk Math.round ()
sumber
Semoga kode berfungsi (tidak melakukan banyak pengujian):
sumber
Saya pikir fungsi di bawah ini dapat membantu
penggunaan:
roundOff(600.23458,2);
akan kembali600.23
sumber
Ini berfungsi untuk membulatkan ke angka N (jika Anda hanya ingin memotong ke angka N, hapus panggilan Math.round dan gunakan yang Math.trunc):
Harus menggunakan logika seperti itu di Jawa di masa lalu ketika saya membuat manipulasi data komponen E-Slate . Itu karena saya telah menemukan bahwa menambahkan 0,1 kali ke 0 Anda akan berakhir dengan beberapa bagian desimal panjang yang tidak terduga (ini karena aritmatika floating point).
Komentar pengguna di Format nomor untuk selalu menampilkan 2 tempat desimal memanggil penskalaan teknik ini.
Beberapa menyebutkan ada kasus yang tidak bulat seperti yang diharapkan dan di http://www.jacklmoore.com/notes/rounding-in-javascript/ ini disarankan:
sumber
Jika Anda tidak terlalu peduli tentang pembulatan, tambahkan saja toFixed (x) dan kemudian hapus tanda 0es dan titik jika perlu. Ini bukanlah solusi yang cepat.
sumber
format(1.2, 5)
dan mendapatkan1.2
, seperti yang saya harapkan1.20000
.