我只是在 Javascript 中偶然发现了一些非常奇怪的东西。
我的脚本将 13596 乘以 0.1,输出为:1359.6000000000001
我们可以同意 0.1 = 1/10,所以我试了一下:
13596/10 = 1359.6
我用 Firefox 和 Chrome 测试了它,结果相同。
我想知道它是否与 float 有关,所以我尝试了以下操作:
13596 * parseFloat(0.1) = 1359.6000000000001
没有。
顺便说一下,这不等于:
(13596*0.1) === (13596/10) => false
有人知道这个结果吗?
最佳答案
请记住,对于 float ,您在屏幕上看到的数字不一定完全计算机正在建模的数字。
例如,使用节点
:
> 1359.6
1359.6
> (1359.6).toFixed(20)
'1359.59999999999990905053'
Node 向您显示 1359.6
,但是当您要求更精确时,您会发现实际数字与您看到的不完全相同——它被四舍五入了。 0.1也是如此:
> (0.1).toFixed(20)
'0.10000000000000000555'
通常,当您使用 float 时,您会在显示它们之前接受这种不精确和舍入数字。
有些数字是可以精确表示的,但最安全的假设是 float 是不精确的。例如,0.5 可以精确表示:
> (0.5).toFixed(20)
'0.50000000000000000000'
除以 10 实际上产生与乘以 0.1 相同的结果:
> 13596/10
1359.6
> (13596/10).toFixed(20)
'1359.59999999999990905053'
在其他语言中,整数之间的除法结果是一个整数,但在 JavaScript 中,所有数字都被建模为 float 。
通常,只要您需要精确表示小数,就应该使用小数类型,尽管这在 JavaScript 中不可用。
此外,使用代码 parseFloat(0.1)
也没有意义,因为 0.1
已经是一个 float 。
关于javascript - 为什么 13596*0.1 与 13596/10 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27107899/