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

javascript Addition creates weird decimal issue

本文关键字:小数 问题 添加 javascript      更新时间:2023-09-26

可能重复:
JavaScript浮点数字问题的优雅解决方案

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

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

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

示例

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

不是所有的数字都可以精确地用浮点重复。进行近似运算,当你对一个未执行的数字进行一次又一次的运算时,情况会变得更糟。

有关示例,请参阅此维基百科条目:http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

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

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

float x = 285.72f
float y = 142.86f
float z = x + y

结果:z=428.580017

您必须使用.toFixed,因为Javascript使用IEEE 754-2008浮点算法会导致这种行为。这些二进制浮点数只是近似值,所以必须使用四舍五入。

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

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