在 JavaScript 中,Number
类型是基于 IEEE 754 双精度浮点数(double precision floating point)来表示的,这意味着它能安全地表示的整数范围是 -(2^53 - 1)
到 2^53 - 1
。超出这个范围的整数可能会丢失精度,因为它们无法被精确地表示为双精度浮点数。
Number.MAX_SAFE_INTEGER
是 2^53 - 1
,即 9007199254740991
,而 Number.MIN_SAFE_INTEGER
是 -9007199254740991
。在这个范围内的整数可以保证不会丢失精度。Number
类型。BigInt
。当使用 Number
类型来表示超出安全整数范围的整数时,由于双精度浮点数的表示限制,会导致精度丢失。
// 使用 BigInt
const bigIntValue = BigInt("9007199254740993");
console.log(bigIntValue); // 输出:9007199254740993n
// 使用 decimal.js
const Decimal = require('decimal.js');
const decimalValue = new Decimal("9007199254740993");
console.log(decimalValue.toString()); // 输出:"9007199254740993"
// 使用字符串表示
const stringValue = "9007199254740993";
console.log(stringValue); // 输出:"9007199254740993"
通过以上方法,可以有效避免 JavaScript 中 Number
类型在处理大整数时的精度丢失问题。
领取专属 10元无门槛券
手把手带您无忧上云