Javascript Number Method不返回预期值

时间:2018-02-26 04:05:31

标签: javascript numbers

我尝试过JavaScript Number 方法,并返回意外结果。

如果我将 192000000000000005 值传递给Number()方法。它返回 192000000000000000 ,不包含 5

如果我传递 19200000000000005 值,则返回 19200000000000004 ,这是意外的。

这些结果的含义是什么?您也可以在下面找到截图。

Chrome控制台

enter image description here

1 个答案:

答案 0 :(得分:2)

由于64位浮点表示的限制,

192000000000000005无法用javascript中的数字表示

安全的最大整数(即所有直到该整数的整数都可以无间隙表示)是Number.MAX_SAFE_INTEGER === 9,007,199,254,740,991

你可以看到16位数字 - 所以18位数字不安全,19位(无论你们从未尝试过)都不会工作 -

注意,MAX_SAFE_INTEGER的实际定义是

  

最大整数n,其中nn + 1都可以完全代表Number



console.log(9007199254740991) //=> 9007199254740991  
console.log(9007199254740992) //=> 9007199254740992  
console.log(9007199254740993) //=> 9007199254740992  




  

因此,虽然9007199254740992可以表示为数字,但因为9007199254740993在存储在64位浮点数时也具有相同的值,所以它不是"安全"

注意90071992547409912**53 - 1 - 当你知道64位浮点有53位尾数时这是有意义的

Mozilla Developer Network Documentation