我使用了以下两种方法:
Number.prototype.myRound = function (decimalPlaces) {
var multiplier = Math.pow(10, decimalPlaces);
return (Math.round(this * multiplier) / multiplier);
};
alert((239.525).myRound(2));
数学上alert应该是239.53
,但它给出239.52
作为输出。所以我尝试使用.toFixed()
函数,我得到了正确的答案。
但是当我试图得到239.575
的答案时,它又给出了错误的输出。
alert((239.575).toFixed(2));
这里的输出应该是239.58
,而不是给出239.57
。
这个错误在最终输出中产生了一点差异。所以有人能帮我解决这个问题吗?
8条答案
按热度按时间bgibtngc1#
这种方法将给予非常正确的轮结果。
只调用这个方法。
ws51t4hk2#
在内部,239.575不能被精确地表示。在二进制中,0.575将是1/2 + 1/16 + 1/128 + 1/256 +...。
碰巧,用二进制表示,结果 * 略 * 小于239.575。因此,
Math.round
向下舍入。要演示,请尝试以下操作:
你会期望结果是0.075,但实际上你得到的是0.0749999999998863。
jckbn6z73#
使用
Math.round
即可这将有助于四舍五入的问题完全。
djmepvbi4#
round()
就可以了。试试这个:Working FIddle
hgc7kmma5#
问题可能是浮点数不准确,因此在不同的情况下(不同的数字收集,不同的浏览器等)可能会得到不同的结果。
另请参阅:toFixed(2) rounds "x.525" inconsistently?
f1tvaqid6#
在我的软件中,我使用这个:
(需要DecimalJS)
ar7v8xwq7#
jxct1oxe8#
我得到了这个简单地覆盖它-〉