【发布时间】:2012-05-15 11:36:17
【问题描述】:
所以我正在制作一个将两个数字(十进制数)相加的脚本,我遇到了问题。
http://jsfiddle.net/DerekL/esqnC/
我做了脚本,结果很不错:
0.1 + 0.5 //0.6
0.2 + 0.3 //0.5
但很快我就明白了:
0.1 + 0.2 //0.30000000000000004
0.01 + 0.06 //0.06999999999999999
而且我觉得它不合适。我知道使用有限位浮点数是一个缺点,但我找不到解决这个问题的方法。
Math.ceil //No
Math.floor //No
.slice //No
更新
是否可以先将数字乘以 1000,然后将它们相加,然后再除以 1000?
【问题讨论】:
-
这不是错误,只是实际值具有固定的精度,因此对实际值进行计算可能会导致一些小错误。
-
Math.round(0.1 + 0.2)为 0。 -
@Gazler - 我需要如何解决它,而不是为什么会发生。
-
解决这个问题的方法是对整数执行操作。因此,如果您使用货币价值,请不要使用美元,而要使用美分。 (在计算结束时,只需除以 100 即可获得以美元为单位的价值)。
-
@Gazler 恭喜:)。当然,您将应用一些数学来确定您需要的精度。另一方面,每个人都理解造成问题中情况的问题,但有一点我不清楚:预期的输出是什么?
标签: javascript numbers