1. 安装 bignumber.js
(1) 使用 npm 安装
npm install bignumber.js
(2) 在浏览器中使用
<script src="https://cdn.jsdelivr.net/npm/bignumber.js@9.0.2/bignumber.min.js"></script>
2. 基本用法
(1) 创建 BigNumber
对象
const BigNumber = require('bignumber.js');// 从字符串创建
const num1 = new BigNumber('123456789012345678901234567890');// 从数字创建
const num2 = new BigNumber(12345);// 从科学计数法创建
const num3 = new BigNumber('1.23e+18');
(2) 基本运算
BigNumber
支持加、减、乘、除等基本运算:
const a = new BigNumber('12345678901234567890');
const b = new BigNumber('98765432109876543210');// 加法
const sum = a.plus(b); // 111111111011111111100// 减法
const diff = a.minus(b); // -86419753208641975320// 乘法
const product = a.times(b); // 1219326311370217952237463801111263526900// 除法
const quotient = a.dividedBy(b); // 0.12499999886093750001
(3) 比较大小
const x = new BigNumber('12345678901234567890');
const y = new BigNumber('98765432109876543210');// 是否相等
console.log(x.isEqualTo(y)); // false// 是否大于
console.log(x.isGreaterThan(y)); // false// 是否小于
console.log(x.isLessThan(y)); // true
(4) 取整和取模
const num = new BigNumber('123.456');// 取整
const integerPart = num.integerValue(); // 123// 四舍五入
const rounded = num.round(); // 123// 取模
const remainder = num.modulo(10); // 3.456
(5) 格式化输出
const num = new BigNumber('1234567890.123456789');// 转换为字符串
console.log(num.toString()); // "1234567890.123456789"// 保留小数位数
console.log(num.toFixed(4)); // "1234567890.1235"// 科学计数法
console.log(num.toExponential(4)); // "1.2346e+9"
3. 高级用法
(1) 链式调用
BigNumber
支持链式调用:
const result = new BigNumber('1234567890').plus('9876543210').times('2').dividedBy('3').toFixed(2);console.log(result); // "7407407400.00"
(2) 处理精度
BigNumber
可以设置全局精度:
// 设置全局精度为 10 位小数
BigNumber.set({ DECIMAL_PLACES: 10 });const num = new BigNumber('1').dividedBy('3');
console.log(num.toString()); // "0.3333333333"
(3) 处理大整数
BigNumber
可以处理超出 JavaScript 安全整数范围的大整数:
const bigInt = new BigNumber('123456789012345678901234567890');
console.log(bigInt.toString()); // "123456789012345678901234567890"
(4) 处理科学计数法
const sciNum = new BigNumber('1.23e+18');
console.log(sciNum.toString()); // "1230000000000000000"
4. 注意事项
(1) 避免直接使用 Number
类型
BigNumber
对象不能直接与 JavaScript 的 Number
类型进行运算,必须先将 Number
转换为 BigNumber
:
const a = new BigNumber('12345678901234567890');
const b = 12345;// 错误:直接与 Number 类型运算
// const sum = a + b;// 正确:将 Number 转换为 BigNumber
const sum = a.plus(new BigNumber(b));
(2) 避免精度丢失
在创建 BigNumber
时,尽量使用字符串而不是数字,以避免精度丢失:
// 错误:精度丢失
const num1 = new BigNumber(12345678901234567890); // 12345678901234567000// 正确:使用字符串
const num2 = new BigNumber('12345678901234567890'); // 12345678901234567890
(3) 处理除零错误
BigNumber
会抛出除零错误:
try {const result = new BigNumber('10').dividedBy('0');
} catch (e) {console.error("Division by zero!");
}
5. 与其他库的比较
特性 | BigNumber (bignumber.js) | BigInt (原生) | Decimal.js |
---|---|---|---|
支持大整数 | ✅ | ✅ | ✅ |
支持高精度小数 | ✅ | ❌ | ✅ |
支持科学计数法 | ✅ | ❌ | ✅ |
链式调用 | ✅ | ❌ | ✅ |
原生支持 | ❌ | ✅ | ❌ |
6. 总结
BigNumber
是 JavaScript 中处理大整数和高精度小数的强大工具,适用于以下场景:
-
超出
Number
类型范围的整数运算。 -
需要高精度的小数运算。
-
科学计算或金融计算。