javascript添加会产生奇怪的小数问题

javascript Addition creates weird decimal issue

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Elegant workaround for JavaScript floating point number problem

为什么使用javascript将两个数字相加时,会返回疯狂的小数点?

如果我在纸上加上285.72+142.86,它等于428.58,你可以用计算器得到同样的答案。

但是,如果我从2个文本框中添加该数字,它将返回428.58000000000004。

例子

我需要我的javascript返回428.58。我知道我可以使用.tofixed(),但我不喜欢这样,因为我不明白为什么把两个数字加在一起会在小数点后产生如此疯狂的位数。


并非所有的数字都能精确地用浮点表示。进行了近似,当您对一个不正确的数字进行了一次又一次的操作后,情况会变得更糟。

请参阅此维基百科条目以获取示例:http://en.wikipedia.org/wiki/floating_point准确性问题

如果您将添加的输入更改为可以用浮点(如1/8)精确表示的内容,那么它将起作用。试试数字:285.125和142.125。

微软.NET也有类似的行为:

1
2
3
4
5
float x = 285.72f

float y = 142.86f

float z = x + y

结果:Z=428.580017


您必须使用.tofixed,因为javascript使用了导致这种行为的IEEE754-2008浮点运算。这些二进制浮点数只是近似值,因此必须使用舍入。


这是因为浮点数不使用某些十进制数字的精确表示,因此可能会产生算术不精确性。除了把数字四舍五入到你所要求的精度之外,我不知道还有什么更好的方法,比如toFixed

http://www.mredkj.com/javascript/nfbasic2.html