ECMAScript 6 Number.MAX_SAFE_INTEGER
可能代表JavaScript在浮点精度问题出现之前可以存储的最大数值。但是,要求添加到此值的数字1也必须表示为Number
。
Number.MAX_SAFE_INTEGER
注意的值
Number.MAX_SAFE_INTEGER
是最大的整数n
,使得n
和n + 1
都可以精确地表示为一个Number
值。值
Number.MAX_SAFE_INTEGER
IS9007199254740991 (2^53−1)
。
Chrome,Firefox,Opera和IE11的JavaScript控制台都可以安全地执行编号为9,007,199,254,740,992的计算。一些测试:
// Valid
Math.pow(2, 53) // 9007199254740992
9007199254740991 + 1 // 9007199254740992
9007199254740992 - 1 // 9007199254740991
9007199254740992 / 2 // 4503599627370496
4503599627370496 * 2 // 9007199254740992
parseInt('20000000000000', 16) // 9007199254740992
parseInt('80000000000', 32) // 9007199254740992
9007199254740992 - 9007199254740992 // 0
9007199254740992 == 9007199254740991 // false
9007199254740992 == 9007199254740992 // true
// Erroneous
9007199254740992 + 1 // 9007199254740992
9007199254740993 + "" // "9007199254740992"
9007199254740992 == 9007199254740993 // true
为什么要求n + 1
必须也可以表示为Number
?为什么不这样做会使值不安全?
我说这Math.pow(2, 53)
是因为,虽然它是最大的可直接表示的整数,但它的不安全之处在于它也是表示该值的第一个值也是另一个值的近似值:
9007199254740992 == 9007199254740993 // true
与Math.pow(2, 53) - 1
:
9007199254740991 == 9007199254740993 // false
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句