📅  最后修改于: 2023-12-03 15:39:24.865000             🧑  作者: Mango
JavaScript 中的整数范围通常受限于 53 位。然而,在某些情况下,需要表示非常大或非常小的整数或精确浮点数,这时就需要使用带有扩展的整数。
BigInt 是一种可以表示任意精度整数的数据类型。它可以处理非常大的整数,直到计算机内存耗尽为止。BigInt 的最大值取决于计算机可用的内存。
使用 BigInt
构造函数创建 BigInt。 BigInt 用 n
后缀表示,以将其与常规数字区分开来。
const a = BigInt(123); // 创建一个 BigInt 实例
const b = 123n; // 直接使用 n 后缀创建 BigInt
BigInt 可以像普通数字一样进行加、减、乘、除、取模和指数运算。与普通数字不同的是,BigInt 运算符不能与普通数字混合使用,需要使用 BigInt 运算符。
const a = 123n;
const b = 456n;
const c = a + b; // 579n
const d = a * b; // 56088n
与普通数字不同,BigInt 不能直接与字符串或其他数据类型混合使用。必须使用 BigInt 内置方法将 BigInt 转换为其他数据类型,或将其他数据类型转换为 BigInt。
const a = 123n;
const b = "456";
const c = BigInt(b); // 将字符串转换为 BigInt
const d = Number(a); // 将 BigInt 转换为数字
十进制是人们常用的数字系统,但是在计算机上,二进制是主要的数字系统。这就会出现精确浮点数计算问题。
Decimal.js 是一种可以在 JavaScript 中进行精确十进制计算的库。它提供了可扩展的数字类型和精确的计算方法。
使用 npm 在项目中安装 Decimal.js。
npm install decimal.js
与 BigInt 类似,使用 Decimal.js 构造函数创建 Decimal 实例。
import Decimal from 'decimal.js';
const a = new Decimal(123.456);
const b = new Decimal("12.3456");
Decimal 可以像普通数字一样进行加、减、乘、除和指数运算。由于 Decimal 精度很高,因此 Decimal 运算往往需要的时间更长。
const a = new Decimal(123.45);
const b = new Decimal(6.78);
const c = a.plus(b); // 130.23
const d = a.dividedBy(b); // 18.16...
与 BigInt 类似,Decimal 无法直接与字符串或其他数据类型混合使用。
const a = new Decimal(123.45);
const b = "6.78";
const c = new Decimal(b); // 将字符串转换为 Decimal
const d = a.toNumber(); // 将 Decimal 转换为数字
在某些情况下,需要在 JavaScript 中处理非常大或非常小的整数或精确浮点数。BigInt 和 Decimal.js 为此提供了解决方案。BigInt 可以处理任意精度整数,而 Decimal.js 可以精确计算十进制浮点数。