Điều này hoạt động để làm tròn đến N chữ số (nếu bạn chỉ muốn cắt ngắn đến N chữ số, hãy xóa lệnh gọi Math.round và sử dụng lệnh Math.trunc một):
function roundN(value, digits) {
var tenToN = 10 ** digits;
return /*Math.trunc*/(Math.round(value * tenToN)) / tenToN;
}
Trước đây tôi đã phải sử dụng đến logic như vậy ở Java khi tôi làm tác giả của các thành phần E-Slate thao tác dữ liệu . Đó là vì tôi đã phát hiện ra rằng thêm 0,1 nhiều lần với 0, bạn sẽ kết thúc với một số phần thập phân dài bất ngờ (điều này là do số học dấu phẩy động).
Một nhận xét của người dùng tại Định dạng số để luôn hiển thị 2 chữ số thập phân gọi kỹ thuật này là chia tỷ lệ.
Một số đề cập rằng có những trường hợp không tròn như mong đợi và tại http://www.jacklmoore.com/notes/rounding-in-javascript/ điều này được đề xuất thay thế:
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/… ), nhưng nó có lỗi trong IE: stackoverflow.com/questions/661562/… ; bạn sẽ phải viết phiên bản của riêng mình ...