我尝试过JavaScript Number 方法,并返回意外结果。
如果我将 192000000000000005 值传递给Number()方法。它返回 192000000000000000 ,不包含 5 。
如果我传递 19200000000000005 值,则返回 19200000000000004 ,这是意外的。
这些结果的含义是什么?您也可以在下面找到截图。
Chrome控制台 :
答案 0 :(得分:2)
192000000000000005无法用javascript中的数字表示
安全的最大整数(即所有直到该整数的整数都可以无间隙表示)是Number.MAX_SAFE_INTEGER === 9,007,199,254,740,991
你可以看到16位数字 - 所以18位数字不安全,19位(无论你们从未尝试过)都不会工作 -
注意,MAX_SAFE_INTEGER的实际定义是
最大整数
n
,其中n
和n + 1
都可以完全代表Number
值
console.log(9007199254740991) //=> 9007199254740991
console.log(9007199254740992) //=> 9007199254740992
console.log(9007199254740993) //=> 9007199254740992

因此,虽然
9007199254740992
可以表示为数字,但因为9007199254740993
在存储在64位浮点数时也具有相同的值,所以它不是"安全"
注意9007199254740991
是2**53 - 1
- 当你知道64位浮点有53位尾数时这是有意义的