Đáng ngạc nhiên, chức năng này chưa được đăng tải mặc dù những người khác có các biến thể tương tự của nó. Đó là từ các tài liệu web MDN cho Math.round (). Nó súc tích và cho phép thay đổi độ chính xác.
function precisionRound(number, precision) {
var factor = Math.pow(10, precision);
return Math.round(number * factor) / factor;
}
console.log (precisionRound (1234.5678, 1)); // sản lượng dự kiến: 1234.6
console.log (precisionRound (1234.5678, -1)); // sản lượng dự kiến: 1230
var inp = document.querySelectorAll('input');
var btn = document.querySelector('button');
btn.onclick = function(){
inp[2].value = precisionRound( parseFloat(inp[0].value) * parseFloat(inp[1].value) , 5 );
};
//MDN function
function precisionRound(number, precision) {
var factor = Math.pow(10, precision);
return Math.round(number * factor) / factor;
}
button{
display: block;
}
<input type='text' value='0.1'>
<input type='text' value='0.2'>
<button>Get Product</button>
<input type='text'>
CẬP NHẬT: Ngày 20 tháng 8 năm 2019 Chỉ cần nhận thấy lỗi này. Tôi tin rằng đó là do lỗi chính xác của dấu phẩy động với Math.round ().
precisionRound(1.005, 2) // produces 1, incorrect, should be 1.01
Những điều kiện này hoạt động chính xác:
precisionRound(0.005, 2) // produces 0.01
precisionRound(1.0005, 3) // produces 1.001
precisionRound(1234.5, 0) // produces 1235
precisionRound(1234.5, -1) // produces 1230
Sửa chữa:
function precisionRoundMod(number, precision) {
var factor = Math.pow(10, precision);
var n = precision < 0 ? number : 0.01 / factor + number;
return Math.round( n * factor) / factor;
}
Điều này chỉ cần thêm một chữ số ở bên phải khi làm tròn số thập phân. MDN đã cập nhật trang Math.round để có thể ai đó có thể cung cấp giải pháp tốt hơn.
0.1
tới một số dấu phẩy động nhị phân hữu hạn.