在 JavaScript 中,数字类型是基本数据类型之一,但是在进行大整数运算时,会存在精度不够的问题。为了解决这一问题,ES2020 引入了 BigInt 类型,可以支持任意精度的整数运算。本文将介绍如何使用 BigInt 进行数字运算。
BigInt 的基本使用
BigInt 类型是在 JavaScript 中新增的一种类型,用于表示任意精度的整数。与 Number 类型不同,BigInt 类型可以表示比 Number 类型更大的整数,例如:
const max = Number.MAX_SAFE_INTEGER; console.log(max + 1); // 9007199254740992 console.log(max + 2); // 9007199254740992 console.log(BigInt(max) + 1n); // 9007199254740993n console.log(BigInt(max) + 2n); // 9007199254740994n
在上面的代码中,Number.MAX_SAFE_INTEGER
是 JavaScript 中能够精确表示的最大整数,它的值为 9007199254740991
,当我们对它进行加 1 或者加 2 操作时,由于 Number 类型的精度限制,其结果不再是正确的值。而使用 BigInt 类型,则可以正常得到正确的结果。
BigInt 类型的字面量表示方式为在整数后面添加 n
,例如 1234n
表示 BigInt 类型的整数 1234。
BigInt 的运算操作
BigInt 类型支持与 Number 类型的运算,但是不能与其他类型进行运算。在 BigInt 类型中,支持的运算操作包括:
- 加法:
+
- 减法:
-
- 乘法:
*
- 除法:
/
- 模运算:
%
- 指数运算:
**
- 比较运算:
<
、<=
、>
、>=
、==
、!=
、===
、!==
例如,我们可以使用 BigInt 类型进行如下运算:
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; console.log(a + b); // 1111111111111111111111111111111n console.log(a - b); // -864197532086419753208641975320n console.log(a * b); // 12193263113702179596958090406153377807762932853351701535704615434100n console.log(a / b); // 0n console.log(a % b); // 123456789012345678901234567890n console.log(a ** 2n); // 15241578780673678546105778281054720515622620750190521n console.log(a < b); // false console.log(a > b); // true console.log(a == b); // false console.log(a != b); // true
BigInt 的注意事项
在使用 BigInt 类型时,需要注意以下几点:
- BigInt 类型不能与其他类型进行运算,需要显式地将其他类型转换为 BigInt 类型才能进行运算。
- BigInt 类型的字面量表示方式为在整数后面添加
n
,例如1234n
表示 BigInt 类型的整数 1234。 - 在进行运算时,需要使用 BigInt 类型的运算符,例如
+
、-
、*
、/
、%
、**
、<
、<=
、>
、>=
、==
、!=
、===
、!==
。 - BigInt 类型的变量可以使用普通的变量赋值方式进行赋值,例如
const a = 1234n;
。 - BigInt 类型的变量可以使用普通的变量名进行操作,例如
a + b
、a++
等。 - BigInt 类型的变量不能使用
Math
对象中的方法,例如Math.abs()
、Math.floor()
等。
示例代码
以下是使用 BigInt 进行数字运算的示例代码:
// 加法 const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; const c = a + b; console.log(c); // 1111111111111111111111111111111n // 减法 const d = a - b; console.log(d); // -864197532086419753208641975320n // 乘法 const e = a * b; console.log(e); // 12193263113702179596958090406153377807762932853351701535704615434100n // 除法 const f = a / b; console.log(f); // 0n // 模运算 const g = a % b; console.log(g); // 123456789012345678901234567890n // 指数运算 const h = a ** 2n; console.log(h); // 15241578780673678546105778281054720515622620750190521n // 比较运算 const i = a < b; console.log(i); // false const j = a > b; console.log(j); // true const k = a == b; console.log(k); // false const l = a != b; console.log(l); // true
总结
ES2020 引入了 BigInt 类型,可以支持任意精度的整数运算。在进行数字运算时,如果存在精度不够的问题,可以考虑使用 BigInt 类型来解决。在使用 BigInt 类型时,需要注意其基本使用方法和注意事项。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c5d633add4f0e0ff05e6d6