JavaScript的最高整数值是多少,一个数字可以在不损失精度的情况下转到哪个值?
2022-08-29 22:07:47
这是由语言定义的吗?是否有定义的最大值?它在不同的浏览器中是否不同?
这是由语言定义的吗?是否有定义的最大值?它在不同的浏览器中是否不同?
JavaScript有两种数字类型:Number
和BigInt
。
最常用的数字类型 是 64 位浮点 IEEE 754 数字。Number
此类型的最大精确整数值是 Number.MAX_SAFE_INTEGER
,即:
从这个角度来看:一千万亿字节是一个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 是不明确的。
> = 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