Câu trả lời của Dogbert là tốt, nhưng nếu mã của bạn có thể phải xử lý các số âm, thì Math.floor
bản thân nó có thể cho kết quả không mong đợi.
Vd Math.floor(4.3) = 4
, nhưngMath.floor(-4.3) = -5
Thay vào đó, hãy sử dụng một chức năng trợ giúp như chức năng này để nhận được kết quả nhất quán:
truncateDecimals = function (number) {
return Math[number < 0 ? 'ceil' : 'floor'](number);
};
var a = 5.467;
var truncated = truncateDecimals(a * 100) / 100;
Đây là một phiên bản tiện lợi hơn của chức năng này:
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);
Nếu đó không phải là hành vi mong muốn, hãy chèn một cuộc gọi đến Math.abs
trên dòng đầu tiên:
var multiplier = Math.pow(10, Math.abs(digits)),
CHỈNH SỬA: shendz chỉ ra một cách chính xác rằng sử dụng dung dịch này với a = 17.56
sẽ tạo ra không chính xác 17.55
. Để biết thêm về lý do tại sao điều này xảy ra, hãy đọc Điều mà mọi nhà khoa học máy tính nên biết về số học dấu chấm động . Thật không may, việc viết một giải pháp loại bỏ tất cả các nguồn gây ra lỗi dấu phẩy động lại khá phức tạp với javascript. Trong một ngôn ngữ khác, bạn sẽ sử dụng số nguyên hoặc có thể là kiểu Thập phân, nhưng với javascript ...
Giải pháp này phải chính xác 100%, nhưng nó cũng sẽ chậm hơn:
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);
}
Đối với những người cần tốc độ nhưng cũng muốn tránh lỗi dấu phẩy động, hãy thử một cái gì đó như BigDecimal.js . Bạn có thể tìm thấy các thư viện Javascript BigDecimal khác trong câu hỏi SO này: "Có thư viện Javascript BigDecimal tốt không?" và đây là một bài đăng blog hay về các thư viện toán học cho Javascript