Ini berfungsi untuk membulatkan ke angka N (jika Anda hanya ingin memotong ke angka N, hapus panggilan Math.round dan gunakan yang Math.trunc):
function roundN(value, digits) {
var tenToN = 10 ** digits;
return /*Math.trunc*/(Math.round(value * tenToN)) / tenToN;
}
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:
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/… ), tetapi bermasalah di IE: stackoverflow.com/questions/661562/… ; Anda harus menulis versi Anda sendiri ...