我只是偶然发现了Javascript中非常奇怪的东西。
我的脚本将13596乘以0.1,输出为:1359.6000000000001
我们可以同意0.1 = 1/10,所以我试了一下:
13596/10 = 1359.6
我用Firefox和Chrome测试过,结果相同。
我想知道它是否与浮动有关,所以我尝试了以下内容:
13596 * parseFloat(0.1) = 1359.6000000000001
不。
顺便说一下,这不相等:
(13596*0.1) === (13596/10) => false
有没有人对这个结果有所了解?
答案 0 :(得分:8)
请记住,对于浮点数,您在屏幕上看到的数字不一定正好计算机正在建模的数字。
例如,使用node
:
> 1359.6
1359.6
> (1359.6).toFixed(20)
'1359.59999999999990905053'
节点向您展示1359.6
,但是当您要求更高精度时,您可以看到实际数字与您看到的不完全相同 - 它是圆形的。 0.1:
> (0.1).toFixed(20)
'0.10000000000000000555'
通常,当你使用花车时,你会在显示之前接受这种不精确和圆整的数字。
某些数字 可以完全表示,但最安全的假设是浮点不精确。例如,0.5可以准确表示:
> (0.5).toFixed(20)
'0.50000000000000000000'
除以10实际上会产生与乘以0.1相同的结果:
> 13596/10
1359.6
> (13596/10).toFixed(20)
'1359.59999999999990905053'
在其他语言中,整数之间的除法产生一个整数,但在JavaScript中,所有数字都被建模为浮点。
通常,只要您需要精确表示十进制数字,就应该使用十进制数字类型,但这在JavaScript中本身不可用。
同样没有必要使用代码parseFloat(0.1)
,因为0.1
已经是浮动。