我是JavaScript的新手,我发现了一个非常奇怪的情况,做了一个非常简单的数学运算:减法。
所以在jQuery函数中我有这个代码:
saldoRicalcolato = finanziamento - variazioneAnticipoNumber;
其中 finanziamento 和 variazioneAnticipoNumber 是2个数字,具有十进制数字。
除了一些特定的值之外,它几乎总是很好。
您可以将执行此语句的奇怪行为复制到FireBug控制台中:
2205.88 - 1103.01
1102.8700000000001
所以在这种情况下结果是非常错误的,因为我得到 1102.8700000000001 而不是 1102.87 ,正如我预期的那样。
为什么呢?我错过了什么?它是一个JavaScript引擎错误还是这样的?可能的?
答案 0 :(得分:2)
这不是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
。您需要使用2
toFixed()
这只是获得所需数字的解决方案。
alert((2205.88 - 1103.01).toFixed(2));