如何使用 ES10 中的 BigInt 解决 JavaScript 中计算大数的问题

在 JavaScript 中计算大数字,如超过 2^53-1 的数字时,会出现精度丢失的问题。这是因为 JavaScript 中使用的是 64 位双精度浮点数,最大精度只能到 2^53-1。ES10 引入了 BigInt 类型来解决这个问题。BigInt 可以表示任意大小的整数,没有精度限制。本文将介绍如何使用 ES10 中的 BigInt 来解决 JavaScript 中计算大数的问题。

如何创建 BigInt

在ES10中,我们可以通过在数字后面加上一个 n 来创建 BigInt。例如:

const bigIntNum = 9007199254740992n;
console.log(bigIntNum); // 9007199254740992n

注意,一个 BigInt 数字必须以 n 结尾,否则它将被视为普通的 Number 类型。

也可以使用 BigInt() 函数来创建 BigInt。例如:

const bigIntNum = BigInt(9007199254740992);
console.log(bigIntNum); // 9007199254740992n

如何进行 BigInt 的计算

既然 BigInt 可以表示任意大小的整数,那我们可以用它来进行常规的算术操作,例如加、减、乘、除等。

const n1 = 9007199254740992n;
const n2 = 9007199254740993n;

// 加法
console.log(n1 + n2); // 18014398509481985n

// 减法
console.log(n2 - n1); // 1n

// 乘法
console.log(n1 * n2); // 81064793292668974095888256n

// 除法
console.log(n2 / n1); // 1n

注意事项

  1. 进行 BigInt 运算时,最好将所有操作数都转换为 BigInt 类型。例如:

    const n1 = 9007199254740992n;
    const n2 = BigInt(9007199254740993);
    
    console.log(n1 + n2); // 18014398509481985n
  2. 不支持使用运算符 + 来进行 BigInt 和 Number 的运算。如果需要进行这种运算,我们可以使用 BigInt 对象的 valueOf() 方法来将结果转换回 Number 类型。例如:

    const n1 = 9007199254740992n;
    const n2 = 1;
    
    console.log(n1 + BigInt(n2).valueOf()); // 9007199254740993n

总结

BigInt 是一个新增的 JavaScript 类型,可以表示任意大小的整数,没有精度限制。当我们需要进行双精度精度超出 2^53-1 的大数计算时,可以使用 BigInt 来解决问题。在使用时,需要注意将所有操作数都转换为 BigInt 类型,同时避免使用运算符 + 进行 BigInt 和 Number 的运算。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b71444add4f0e0fffad745