ES10 中的 BigInt:解决 JavaScript 中的数字精度问题

阅读时长 4 分钟读完

大部分开发人员都知道 JavaScript 中的数字精度问题:当我们处理大于 2 的 53 次幂的数字时,JavaScript 会失去精度,从而得到错误的结果。这是因为在 JavaScript 中,数字都是使用浮点数存储的(IEEE 754 标准)。因此,我们需要 BigInt。BigInt 是在 ES10 中引入的新的原始数据类型,它可以处理任意大且精确的整数。

BigInt 的优点

BigInt 与普通数字最大的不同是它不使用 IEEE 754 标准存储数字。相反,它以字符串的形式存储数字,因此可以处理任意长度的整数。BigInt 还支持普通数字的所有运算:加、减、乘和除。而且,BigInt 支持逻辑运算符、比较运算符和位运算符。

BigInt 的语法

要创建 BigInt,我们可以使用 BigInt() 函数将一个数字转换为一个 BigInt。我们还可以在数字文本的末尾添加 n,来明确我们要创建一个 BigInt。

值得注意的是,我们不能将普通数字与 BigInt 相加。如果我们这样做,会得到一个 TypeError。

因此,我们必须使用 BigInt() 函数将数字转换为 BigInt。

BigInt 的运算

除了 +-,BigInt 还支持 */ 运算,以及逻辑运算符、比较运算符和位运算符。

-- -------------------- ---- -------
----- --- - ---
----- --- - ---
----- ----- - --- - ---- -- --
----- --- - ----- - ---- -- --
----- ---- - --- - ---- -- --

----- ------ - ---- -- ----- -- ----- - ----- -- ----

----- --------- - ----- -- ---- -- ---
----- ---------- - --- -- ---- -- --

我们还可以使用 BigInt.asIntN()BigInt.asUintN() 函数将 BigInt 转换为指定位数的整数。

BigInt 和普通数字的互操作

如果需要在 BigInt 和普通数字之间转换,可以使用 BigInt()Number() 函数。

BigInt 的应用

BigInt 可以用于任何需要处理大整数,并且需要高精度的场景,例如密码学算法、位运算、算数运算等等。下面是一个快乐的示例:使用 BigInt 计算斐波那契数列中第 n 个数字。

-- -------------------- ---- -------
-------- ------ -
  -- -- -- -- ------ ---
  -- -- --- -- ------ ---

  --- - - ---
  --- - - ---

  --- ---- - - -- - -- -- ---- -
    ----- - - - - --
    - - --
    - - --
  -

  ------ --
-

---------------------- -- ----------------------

总结

BigInt 原始数据类型是 ES10 中最重要的新增功能之一。它提供了处理大整数的强大能力,可以帮助我们解决数字精度问题。虽然在性能上会比普通数字差一些,但在需要处理大整数或需要高精度计算的场景下,BigInt 能发挥出其真正的价值。

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

纠错
反馈