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

2022-08-29 22:07:47

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


答案 1

JavaScript有两种数字类型:NumberBigInt

最常用的数字类型 是 64 位浮点 IEEE 754 数字。Number

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

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

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

在此上下文中,“安全”是指精确表示整数并正确比较它们的能力。

从规格:

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

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

请注意,按位运算符和 shift 运算符对 32 位整数进行操作,因此在这种情况下,最大安全整数为 231-1 或 2,147,483,647。

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

关于数字 9,007,199,254,740,992 主题的技术说明:此值有一个精确的 IEEE-754 表示形式,您可以从变量中分配和读取此值,因此对于小于或等于此值的整数域中精心选择的应用程序,您可以将其视为最大值。

在一般情况下,必须将此 IEEE-754 值视为不精确,因为它编码的是逻辑值 9,007、199、254、740、992 还是 9,007、199、254、740、993 是不明确的。


答案 2

> = ES6:

Number.MIN_SAFE_INTEGER;
Number.MAX_SAFE_INTEGER;

<= ES5

参考

Number.MAX_VALUE;
Number.MIN_VALUE;

console.log('MIN_VALUE', Number.MIN_VALUE);
console.log('MAX_VALUE', Number.MAX_VALUE);

console.log('MIN_SAFE_INTEGER', Number.MIN_SAFE_INTEGER); //ES6
console.log('MAX_SAFE_INTEGER', Number.MAX_SAFE_INTEGER); //ES6