一尘不染

一个数字可以在不损失精度的情况下达到的JavaScript的最高整数值是多少?

javascript

这是由语言定义的吗?是否有规定的最大值?在不同的浏览器中是否有所不同?


阅读 273

收藏
2020-04-22

共1个答案

一尘不染

JavaScript有两种数字类型:NumberBigInt

最常用的数字类型Number为64位浮点IEE 754数字。

该类型的最大精确整数值为Number.MAX_SAFE_INTEGER,即:

  • 2 53 -1,或
  • +/- 9,007,199,254,740,991,或
  • 九四十亿七千七百亿一百九十二亿一千五百四十四万一四十九万一千九十一

从一个角度来看:一个4千万个字节是PB(或一千TB)。

在本文中,“安全”是指能够准确表示整数并正确比较它们的能力。

从规格:

请注意,所有大小不大于2 53的正整数和负整数都可以在Number类型中表示(实际上,整数0具有+0和-0两种表示形式)。

为了安全地使用大于此值的整数,您需要使用BigInt,没有上限。

请注意,按位运算符和移位运算符对32位整数进行运算,因此在这种情况下,最大安全整数为2 31 -1或2147483647。

const log = console.log

var x = 9007199254740992

var y = -x

log(x == x + 1) // true !

log(y == y - 1) // also true !



// Arithmetic operators work, but bitwise/shifts only operate on int32:

log(x / 2)      // 4503599627370496

log(x >> 1)     // 0

log(x | 1)      // 1

关于编号为9007199254740992的主题的技术说明:该值有一个精确的IEEE-754表示形式,您可以从变量中分配和读取该值,因此对于在小于或等于整数的整数域中进行
非常仔细 选择的应用程序此值,您可以将其视为最大值。

在一般情况下,您必须将此IEEE-754值视为不精确,因为它是对逻辑值9007199254740992还是9007199254740993进行编码都是模棱两可的。

2020-04-22