为什么 JavaScript return 我在这个小数减法中得到了错误的结果?

Why JavaScript return me a wrong result in this subtraction of decimals values?

我是 JavaScript 的新手,我在做一个非常简单的数学运算时发现了一个非常奇怪的情况:减法。

所以在 jQuery 函数中我有这个代码:

saldoRicalcolato = finanziamento - variazioneAnticipoNumber;

其中 finanziamentovariazioneAnticipoNumber 是 2 numbers 具有十进制数字。

除了某些特定值外,它几乎总是很好。

您可以将执行此语句的奇怪行为复制到 FireBug 控制台中:

2205.88 - 1103.01
1102.8700000000001

所以在这种情况下,结果基本上是错误的,因为我得到的是 1102.8700000000001 而不是我预期的 1102.87

为什么?我错过了什么?是 JavaScript 引擎错误还是类似的问题?可能吗?

这不是 JavaScript 问题,而是更普遍的计算机问题。浮点数不能正确存储所有十进制数,因为它们以二进制形式存储内容 例如:

0.5 is store as b0.1 
but 0.1 = 1/10 so it's 1/16 + (1/10-1/16) = 1/16 + 0.0375
0.0375 = 1/32 + (0.0375-1/32) = 1/32 + 00625 ... etc

所以二进制 0.1 是 0.00011... 但这是无止境的。除了计算机必须在某个时候停止。因此,如果在我们的示例中我们在 0.00011 处停止,我们将得到 0.09375 而不是 0.1。

这不取决于哪种语言,而是在计算机上,取决于语言的是您如何显示数字。通常该语言会将数字四舍五入为可接受的表示形式,但显然 JavaScript 不会。

如果您想要 1102.87。您需要使用 toFixed()

将小数位设置为 2

这只是获取所需号码的解决方案。

alert((2205.88 - 1103.01).toFixed(2));