JavaScript 的 Number 类型能够在不丢失精度的情况下达到的最大整数值是多少?
MAX_SAFE_INTEGER 常量的值为 9007199254740991 (9,007,199,254,740,991 或九千万亿)。JavaScript 只能正确表示介于 -(253 - 1) 和 253 - 1 之间的整数,这就是该数字的依据。JavaScript 使用 IEEE 754 标准中指定的双精度浮点数格式。
JavaScript 中的两种数字类型是 Number 和 BigInt。
Number 是最常用的数字类型,是一个 64 位 IEEE 754 浮点数。
Number.MAX_SAFE_INTEGER,如下所示,具有此类型的最大精确整数值:
253-1,或者
+/- 9,007,199,254,740,991,或者
用数字表示为:九千万亿七万亿一百九十九十亿二亿五千四百七十万四千九百九十一
因此,在一个上下文中,一个 PB(拍字节)是一千万亿字节(或一千 TB(太字节))。在这个上下文中,“安全”指的是能够精确表示和比较整数的能力。要安全地使用大于此值的整数,必须使用 BigInt,它没有上限。
在这种情况下,最大安全整数是 231-1,或 2,147,483,647。这是因为位运算符和移位运算符只作用于 32 位数字。
示例 1
在这个例子中,让我们了解如何使用位运算符和移位运算符来使用 32 位整数。
<!DOCTYPE html> <html> <title>What is JavaScript’s highest integer value that a Number can go to without losing precision? - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> const log = console.log let a = 9007199254740992 let b = -a log(a == a + 1) // true ! log(b == b - 1) // this is also true ! // Bitwise/shifts are only used on int32, although arithmetic operators are acceptable. log(a / 2) // 4503599627370496 log(a >> 1) // 0 log(a | 1) // 1 </script> </body> </html>
请按键盘上的 F12 键访问浏览器控制台以查看结果。
示例 2
在 Typescript 中,可以使用 MAX_SAFE_INTEGER 常量来表示可以使用的最大安全整数。它是 Number 对象的静态属性。其值为 9007199254740991。
“安全”是指任何大于上述数字的数字都不能保证被精确和正确地表示。此限制是由 Javascript 使用的双精度 64 位数字格式而不是 Typescript 施加的。
<!DOCTYPE html> <html> <title>What is JavaScript’s highest integer value that a Number can go to without losing precision? - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> document.write(Number.MAX_SAFE_INTEGER +'<br>') //9007199254740991 document.write(Number.MIN_SAFE_INTEGER) //-9007199254740991 </script> </body> </html>
示例 3
在这个例子中,让我们了解如何使用 Integer.isSafeInteger 方法来验证一个数字是否安全。
<!DOCTYPE html> <html> <title>What is JavaScript’s highest integer value that a Number can go to without losing precision? - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> document.write(Number.isSafeInteger(Number.MAX_SAFE_INTEGER) +'<br>'); //this returns true document.write(Number.isSafeInteger(Number.MAX_SAFE_INTEGER+1)); //this returns false </script> </body> </html>
MAX_VALUE & MIN_VALUE
示例 4
Number 数据类型可以表示的最大数字是 1.7976931348623157e+308。MAX_VALUE。Number.MIN_VALUE 是最小数字。
<!DOCTYPE html> <html> <title>What is JavaScript’s highest integer value that a Number can go to without losing precision? - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> document.write(Number.MAX_VALUE +'<br>') document.write(Number.MIN_VALUE) </script> </body> </html>
示例 5
数字超过 Number.MAX_VALUE。双精度 64 位二进制系统无法表示 MAX_VALUE 以上的值。因此,MAX_VALUE 以上的任何值都会被截断为 MAX_VALUE。而一个极大的值会返回 Infinity。
<!DOCTYPE html> <html> <title>What is JavaScript’s highest integer value that a Number can go to without losing precision? - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> document.write(Number.MAX_VALUE + 100 == Number.MAX_VALUE); //true document.write("<br>"); document.write(Number.MAX_VALUE + Number.MAX_VALUE); //Infinity </script> </body> </html>
简而言之
Typescript Number 对象的静态属性包括 MAX_SAFE_INTEGER、MIN_SAFE_INTEGER、MAX_VALUE 和 MIN_VALUE。这些表示 Number 数据类型可以支持的最大/最小值。使用 MAX_SAFE_INTEGER 和 MIN_SAFE_INTEGER 至关重要,因为任何大于这两个值的整数都不能保证被精确和正确地表示。