今天在Javascript面试中,一个朋友被问到这个问题:
为什么++ a会增加两次?
a = b = 9**17-2
++a
console.log(a-b) //Why is it 2 ?
答案 0 :(得分:5)
这是因为该值大于Number.MAX_SAFE_INTEGER
,并且不能用IEEE754双精度数字精确表示(JS用作数字表示格式)
16677181699666566
在IEEE754双精度中是1101100111111110011101111001100010000001100101000011
并且16677181699666568
是1101100111111110011101111001100010000001100101000100
您会看到二进制文件仍然相差一个,但它的精度不足以使其以人类可读的格式正确显示。