# 与 bignumber.js 对比

URL: https://caijiao.org/decimaljs/09-compare/02-bignumberjs
Source: docs/decimaljs/09-compare/02-bignumberjs.md
Description: 比较 decimal.js 和 bignumber.js 两个流行的高精度计算库的功能、性能和适用场景，帮助用户选择合适的库。

decimal.js 和 bignumber.js 都是广泛使用的高精度数字计算库，它们在设计理念、功能和性能上有一定差异。

## 功能对比

| 特性                | decimal.js                            | bignumber.js                        |
|---------------------|-------------------------------------|-----------------------------------|
| 支持的运算          | 加减乘除、幂运算、平方根、比较、格式化等 | 加减乘除、幂运算、比较、格式化等      |
| 精度控制            | 支持高精度和多种舍入模式              | 支持高精度和多种舍入模式              |
| 链式调用            | 支持                                | 支持                               |
| 支持输入类型        | 支持字符串、数字、Decimal实例          | 支持字符串、数字、BigNumber实例      |
| 科学计数法处理      | 支持                                | 支持                               |
| 额外功能            | 配置灵活，支持有效数字与指数范围控制    | 支持自定义精度和舍入模式             |

## 性能比较

- 两者性能相近，decimal.js 代码较大，功能更丰富。  
- bignumber.js 体积更小，适合对体积和性能有较高要求的场景。

## 使用建议

| 需求场景           | 推荐库                             |
|--------------------|----------------------------------|
| 需要丰富数学运算    | decimal.js                       |
| 需要轻量级、高性能  | bignumber.js                    |
| 财务、科学计算      | 视具体需求选择，均能满足高精度要求 |

## 简单示例

```js
import Decimal from 'decimal.js';
import BigNumber from 'bignumber.js';

const d1 = new Decimal('0.1').plus('0.2');
const d2 = new BigNumber('0.1').plus('0.2');

console.log(d1.toString());       // "0.3"
console.log(d2.toString());       // "0.3"
````

## 总结

* decimal.js 功能更全面，适合复杂计算场景。
* bignumber.js 更轻量，适合性能和包体积敏感的项目。

选择时建议根据项目具体需求权衡功能和性能。

---

通过比较，用户能更有针对性地选择最适合自己的高精度数值库。
