6

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

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

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

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

例子

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

4

3 回答 3

5

并非所有数字都可以精确地以浮点数表示。进行近似计算,当您对不精确的数字进行一次又一次的操作时,情况会变得更糟。

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

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

Microsoft .NET 有类似的行为:

float x = 285.72f

float y = 142.86f

float z = x + y

结果:z = 428.580017

于 2011-08-23T17:03:14.320 回答
3

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

于 2011-08-23T17:02:14.417 回答
2

这是因为浮点数不使用某些十进制数的精确表示,因此可能会出现算术不精确。除了将数字四舍五入到您需要的任何精度之外,我不知道有什么更好的方法,toFixed就像

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

于 2011-08-23T17:02:33.823 回答