JavaScript将0.000000002添加到计算中

时间:2011-09-24 16:23:34

标签: javascript floating-point

来源:Pastebin 屏幕截图:Image

<input alt="Flyer|49.80" type="checkbox" class="price" id="cb3" name="price_3" />
<input alt="CMS|199.99" type="checkbox" class="price" id="cb1" name="price_1" />
嘿伙计们!

也许有人可以在我的来源中给我一点提示。 当我添加49.8 + 199.99时,它会增加0.000000002到我的总和。

感谢您的任何建议!

4 个答案:

答案 0 :(得分:5)

您需要了解how floating point numbers work并将答案四舍五入到最接近的两位数。

简短的回答是,这就是JavaScript和所有使用浮点数的语言的工作原理。你无法“修复”它。您所能做的就是接受浮点数不精确并处理它。

答案 1 :(得分:3)

是的,正如@duffymo所提到的,问题与浮点数有关 - 具体来说,问题的根源(这不是JavaScript特有的)是 没有办法将0.1映射到有限二进制浮点数

答案 2 :(得分:2)

var val = 49.8 + 199.99;
alert(val.toFixed(2));

答案 3 :(得分:2)

问题是javascript将数字存储为64位浮点数。这意味着有一些补充,其中在十进制数学中将加到100.00的数字不会在浮点数学中。 有关更多信息,请参阅链接:

Is floating point math broken?

http://www.scribd.com/doc/5836/What-Every-Computer-Scientist-Should-Know-About-FloatingPoint-Arithmetic

您可以通过将所有输入乘以100,添加它们,然后比较10,000来避免这种情况。这将起作用,因为2 ^ -52和2 ^ 52之间的所有整数都可以用双精度浮点数精确表示,但分数可能不是。 http://en.wikipedia.org/wiki/Double_precision_floating-point_format

另一种方法是滚动你自己的十进制加法函数来处理数字字符串。