我在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 * 100262082.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));

09-27 16:06