今天在Javascript求职面试中,一个 friend 被问到这个问题:

为什么++ a增加两次?

a = b = 9**17-2
++a
console.log(a-b) //Why is it 2 ?

最佳答案

这是因为该值大于Number.MAX_SAFE_INTEGER,并且无法用IEEE754 double 数字精确表示(JS使用其数字表示格式)
16677181699666566是IEEE754 double 中的1101100111111110011101111001100010000001100101000011
166771816996665681101100111111110011101111001100010000001100101000100
您会看到二进制文件仍然相差一个,但它的精度不足以以人类可读的格式正确显示它。

10-06 08:20