在 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
注意事项
进行 BigInt 运算时,最好将所有操作数都转换为 BigInt 类型。例如:
const n1 = 9007199254740992n; const n2 = BigInt(9007199254740993); console.log(n1 + n2); // 18014398509481985n
不支持使用运算符
+
来进行 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