在编写计算机程序时,数学运算是不可避免的一部分。然而,JavaScript 在处理超出数值表示范围的数值时会导致精度丢失。ES10 引入了 BigInt API,使 JavaScript 能够处理无限大的整数,从而更加准确地进行数值计算。
BigInt 简介
BigInt 是一种新的类型,它能够存储和操作超出了 JavaScript 中 Number 类型可表示范围的整数。BigInt 类型变量采用带 "n" 后缀的数字字面量进行表示。例如,可以通过以下方式声明一个 BigInt 变量:
const bigInt = 1234567890123456789012345678901234567890n;
BigInt 变量可以进行各种基本的算术运算操作,例如加、减、乘、除等。BigInt 还可以使用大部分与 Number 类型相关的 JavaScript 运算符。下面是一些基本的 BigInt 运算示例:
// javascriptcn.com 代码示例 const a = 1234567890123456789012345678901234567890n; const b = 9876543210987654321098765432109876543210n; // 基本算术运算 const sum = a + b; const difference = a - b; const product = a * b; const quotient = a / b; // 其他运算符 const modulus = a % b; const bitwiseOr = a | b; const logicalAnd = a && b;
需要注意的是,由于 BigInt 是一种实验性的特性,对于某些运算符,如位运算符和关系运算符等,需要在 JS 引擎中使用 BigInt 对象进行运算,而不能使用常规的 Number 对象。例如:
// javascriptcn.com 代码示例 const a = 1234567890123456789012345678901234567890n; const b = 9876543210987654321098765432109876543210n; // 位运算 const shiftLeft = a << 2n; const shiftRight = a >> 2n; const bitwiseAnd = a & b; // 关系运算 const equal = a === b; const notEqual = a !== b; const lessThan = a < b; const greaterThan = a > b; const lessThanOrEqual = a <= b; const greaterThanOrEqual = a >= b;
BigInt API
BigInt API 提供了一些有用的函数,可以在处理大整数时进行进一步的操作。以下是一些最常见的 BigInt API:
BigInt.asUintN()
将 BigInt 转换为无符号整数。
const bigInt = 1234567890123456789012345678901234567890n; const uint32 = BigInt.asUintN(32, bigInt);
BigInt.asIntN()
将 BigInt 转换为有符号整数。
const bigInt = 1234567890123456789012345678901234567890n; const int32 = BigInt.asIntN(32, bigInt);
BigInt.prototype.toString()
将 BigInt 转换为字符串类型。
const bigInt = 1234567890123456789012345678901234567890n; const string = bigInt.toString();
BigInt.prototype.valueOf()
将 BigInt 转换为原始值类型。
const bigInt = 1234567890123456789012345678901234567890n; const number = bigInt.valueOf();
BigInt 常见使用场景
处理超大整数
当需要处理超出 JavaScript Number 类型能表示的范围的整数时,就可以使用 BigInt。例如以下示例:
const bigNum = 1234567890123456789012345678901234567890n; const hugeNum = bigNum ** 100n;
保证最大安全整数以下计算的正确性
在处理财务数据、科学计算等需要保证准确到最后一位的计算时,BigInt 可以保证计算的正确性,同时避免了 JavaScript Number 类型精度丢失问题。例如以下示例:
const num1 = 1111111111111111111111111111111111111111111111111111111111111111111111111111n; const num2 = 2222222222222222222222222222222222222222222222222222222222222222222222222222n; const result = num1 * num2;
总结
通过了解 ES10 实验性的 BigInt API,我们可以在 JavaScript 中全面掌握无限大整数的运算和处理,从而开启更加精确和准确的大数计算之旅。BigInt 的使用虽然需要注意一些细节,但它可以帮助我们避免 JavaScript Number 类型的精度丢失问题,从而保证计算的正确性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65461d7d7d4982a6ebfe7c5b