And*_*ili -2 javascript javascript-objects
我是 JavaScript 的新手,我发现了一个非常奇怪的情况,正在做一个非常简单的数学运算:减法。
所以在一个 jQuery 函数中,我有这个代码:
saldoRicalcolato = finanziamento - variazioneAnticipoNumber;
Run Code Online (Sandbox Code Playgroud)
凡finanziamento和variazioneAnticipoNumber 2个数字为十进制数字。
除了某些特定值外,它几乎总是很好用。
您可以将执行此语句的奇怪行为复制到 FireBug 控制台中:
2205.88 - 1103.01
1102.8700000000001
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,结果基本上是错误的,因为我得到了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
Run Code Online (Sandbox Code Playgroud)
所以在二进制 0.1 中是 0.00011 ......但这是无止境的。除了计算机必须在某个时候停止。因此,如果在我们的示例中,我们在 0.00011 处停止,我们将得到 0.09375 而不是 0.1。
它不取决于哪种语言,而取决于计算机,取决于语言的是您如何显示数字。通常该语言会将数字四舍五入为可接受的表示,但显然 JavaScript 不会。
如果您想获得1102.87. 您需要2使用以下方法将小数位设置为toFixed()
这只是获得您想要的号码的解决方案。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |