如何使用 ECMAScript 2021 中的 BigInt 进行高精度计算

· 约 4 分钟读完

在前端开发过程中,我们经常需要进行数值计算。然而在 JavaScript 中,对于超出 Number 类型表示范围的大整数值,我们常常需要借助第三方库来进行高精度计算。但是,在 ECMAScript 2021 中,新增了一种类型 BigInt,它可以表示任意精度的整数,而无需引入外部库。

BigInt 的基本用法

在 JavaScript 中,使用 BigInt 类型需要在数字后面增加 n 后缀,例如:

使用 BigInt 类型的数值也支持各种数学运算,例如:

BigInt 的注意事项

BigInt 与 Number 类型的区别

BigInt 与 Number 类型之间有以下一些区别:

  • BigInt 类型不能与 Number 类型相加、相减、相乘,否则会报错。但是 BigInt 类型能与 Number 类型进行除法运算。

  • BigInt 类型与 Number 类型之间不能相互比较,否则会报错。例如,下面的表达式会报错:

BigInt 的运算性能

与 Number 类型相比,BigInt 类型的运算性能稍低。因此,如果只需要执行简单的计算,我们可以继续使用 Number 类型,而只在必要的情况下使用 BigInt 类型。

使用 BigInt 实现高精度计算

下面我们来实现一个大整数加法函数,借助 BigInt 类型来进行高精度计算:

这个函数的核心思路是模拟手动计算的过程,从低位向高位一位位地进行加法运算。其中,carry 变量表示进位值,digit1 和 digit2 变量表示当前位上两个数值对应的位数,digitSum 变量表示当前位的和。根据 digitSum 是否大于 9n,判断当前位是否有需要进位,然后将进位值传递给下一位进行运算。

函数的使用方法如下:

结语

在本文中,我们了解了 ECMAScript 2021 中新增的 BigInt 类型,并学习了如何使用它进行高精度计算。虽然 BigInt 类型相对于 Number 类型的运算性能稍低,但它可以让我们在前端开发过程中避免引入外部库,从而更加便捷地进行高精度计算。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d6a3b8a941bf7134c6b35f