我在JavaScript中舍入有一个问题。我正在使用一个函数进行舍入:
function roundup(rnum, rlength){
var newnumber = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
return newnumber;
}
var amount = roundup(2253.825, 3);
奇怪的是,当我四舍五入数字
2253.825
时,结果是2253.82
必须是2253.83
。当我四舍五入数字5592.825
时,结果是5592.83
,这是正确的。任何想法如何解决这个问题?
最佳答案
浮点舍入错误在这里是错误的。 2620.825 * 100
是262082.49999999997
,因此在四舍五入时,结果是262082
。
这是一种更可靠的方法来纠正此问题:
function roundup(rnum, rlength) {
var shifted = rnum * Math.pow(10, rlength),
rounded = Math.round(shifted),
delta = Math.abs(shifted - rounded);
if (delta > 0.4999999 && delta < 0.5) {
rounded += (rounded < 0 ? -1 : 1);
}
return rounded / Math.pow(10, rlength);
}
console.log("2620.825 :=> " + roundup(2620.825, 2));
console.log("2621.825 :=> " + roundup(2621.825, 2));
console.log("2620.8255 :=> " + roundup(2620.8255, 2));