一、核心痛点:为什么需要bignumber.js?
1.1 JavaScript的数字精度灾难
javascript
// 经典精度问题
console.log(0.1 + 0.2 === 0.3); // false
// 大数溢出问题
const MAX = Number.MAX_SAFE_INTEGER; // 9007199254740991
console.log(MAX + 1 === MAX + 2); // true!
二、快速入门:基础运算四步法
2.1 安装与引入
bash
npm install bignumber.js
javascript
import BigNumber from 'bignumber.js';
2.2 创建BigNumber对象
javascript
// 从字符串创建(推荐,避免精度损失)
const num1 = new BigNumber('0.1');
// 从数字创建(不推荐)
const num2 = new BigNumber(0.2);
// 从其他BigNumber实例创建
const num3 = new BigNumber(num1);
2.3 基本运算
javascript
const sum = num1.plus(num2); // 0.3
const diff = num1.minus(0.05); // 0.05
const product = num1.times(10); // 1
const quotient = num1.dividedBy(3); // 0.333333...
2.4 结果输出
javascript
// 转换为字符串
sum.toString(); // '0.3'
// 保留小数位
quotient.toFixed(4); // '0.3333'
// 转换为原始数字(注意精度风险)
product.toNumber(); // 1
三、高级运算:金融级精度控制
3.1 精度与舍入模式
javascript
// 全局配置精度
BigNumber.set({ DECIMAL_PLACES: 10 });
// 单个运算控制
const pi = new BigNumber('3.1415926535');
pi.dividedBy(2).toFixed(4); // 默认四舍五入:'3.1416'
//指定特定舍入法
pi.toFixed(4, BigNumber.ROUND_HALF_EVEN); // '3.1416'
3.2 比较与判断
javascript
const a = new BigNumber('0.0000000001');
const b = new BigNumber('0.0000000000000000001');
// 精度比较
a.isGreaterThan(b); // true
a.isLessThanOrEqualTo(b); // false
// 特殊值检测
const nan = new BigNumber(NaN);
nan.isNaN(); // true
const inf = new BigNumber(Infinity);
inf.isFinite(); // false
3.3 数学函数
javascript
// 开平方
const sq = new BigNumber(256).sqrt(); // 16
// 指数运算
const exp = new BigNumber(2).exponentiatedBy(10); // 1024
// 模运算
new BigNumber(15).mod(4); // 3
四、最佳实践指南
4.1 安全操作规范
javascript
// ✅ 始终使用字符串初始化
new BigNumber('0.00000001');
// ❌ 避免浮点数初始化
new BigNumber(0.00000001); // 可能不精确
// ✅ 重要计算指定舍入模式
value.decimalPlaces(8, BigNumber.ROUND_HALF_UP);
// ✅ 使用自定义错误处理
try {
const result = new BigNumber('abc');
} catch (e) {
console.error('Invalid number:', e.message);
}
4.2 类型定义(TypeScript)
typescript
import { BigNumber } from 'bignumber.js';
interface FinancialResult {
total: BigNumber;
tax: BigNumber;
}
function calculateInvoice(amount: string): FinancialResult {
const amountBN = new BigNumber(amount);
const tax = amountBN.times(0.1);
return {
total: amountBN.plus(tax),
tax
};
}
结语
官网地址 :mikemcl.github.io/bignumber.j...
GitHub仓库 :github.com/MikeMcl/big...
如果你喜欢本教程,记得点赞+收藏!关注我获取更多JavaScript开发干货。