Jawaban Dogbert bagus, tetapi jika kode Anda mungkin harus berurusan dengan angka negatif, Math.floor
dengan sendirinya dapat memberikan hasil yang tidak terduga.
Misalnya Math.floor(4.3) = 4
, tapiMath.floor(-4.3) = -5
Gunakan fungsi pembantu seperti ini untuk mendapatkan hasil yang konsisten:
truncateDecimals = function (number) {
return Math[number < 0 ? 'ceil' : 'floor'](number);
};
var a = 5.467;
var truncated = truncateDecimals(a * 100) / 100;
Berikut versi yang lebih nyaman dari fungsi ini:
truncateDecimals = function (number, digits) {
var multiplier = Math.pow(10, digits),
adjustedNum = number * multiplier,
truncatedNum = Math[adjustedNum < 0 ? 'ceil' : 'floor'](adjustedNum);
return truncatedNum / multiplier;
};
var a = 5.467;
var truncated = truncateDecimals(a, 2);
var b = 4235.24;
var truncated = truncateDecimals(b, -2);
Jika itu bukan perilaku yang diinginkan, masukkan panggilan ke Math.abs
di baris pertama:
var multiplier = Math.pow(10, Math.abs(digits)),
EDIT: shendz dengan benar menunjukkan bahwa menggunakan solusi ini dengan a = 17.56
akan menghasilkan salah 17.55
. Untuk mengetahui lebih lanjut tentang mengapa hal ini terjadi, baca Yang Harus Diketahui Setiap Ilmuwan Komputer Tentang Aritmatika Titik Mengambang . Sayangnya, menulis solusi yang menghilangkan semua sumber kesalahan floating-point cukup rumit dengan javascript. Dalam bahasa lain Anda akan menggunakan bilangan bulat atau mungkin tipe Desimal, tetapi dengan javascript ...
Solusi ini harus 100% akurat, tetapi juga akan lebih lambat:
function truncateDecimals (num, digits) {
var numS = num.toString(),
decPos = numS.indexOf('.'),
substrLength = decPos == -1 ? numS.length : 1 + decPos + digits,
trimmedResult = numS.substr(0, substrLength),
finalResult = isNaN(trimmedResult) ? 0 : trimmedResult;
return parseFloat(finalResult);
}
Bagi mereka yang membutuhkan kecepatan tetapi juga ingin menghindari kesalahan floating-point, cobalah sesuatu seperti BigDecimal.js . Anda dapat menemukan pustaka javascript BigDecimal lainnya dalam pertanyaan SO ini: "Apakah ada pustaka Javascript BigDecimal yang bagus?" dan inilah postingan blog yang bagus tentang perpustakaan matematika untuk Javascript