decimal.js 实现了对任意精度的十进制进行计算的 JavaScript 库。
decimal.js 是一个用于解决 JavaScript 浮点数精度问题的开源库,它通过实现任意精度的十进制算术运算,确保了计算结果的准确性。下面这个表格汇总了它的核心信息。
| 特性维度 | 描述 |
|---|---|
| 核心价值 | 解决 JavaScript 浮点数计算精度问题(如 0.1 + 0.2 !== 0.3)并进行大数运算。 |
| 精度类型 | 任意精度计算,有效数字位数可配置,不受 IEEE 754 双精度浮点数格式(约15位有效数字)限制。 |
| 功能范围 | 支持加减乘除、幂运算、开方、三角函数等;支持二进制、八进制、十六进制数值处理。 |
| 编程支持 | 支持链式调用;提供 TypeScript 类型定义文件。 |
| 适用场景 | 金融计算、科学计算、工程计算、数据可视化等对精度要求高的领域。 |
💡 如何使用
安装与引入
你可以通过 npm 安装或直接在浏览器中通过 CDN 引入该库。
npm install decimal.js
在代码中引入并使用:
// 在Node.js或支持ES Module的现代环境中
import Decimal from 'decimal.js';
// 或者
const Decimal = require('decimal.js');
// 在浏览器环境中通过CDN使用
// <script src="https://cdn.jsdelivr.net/npm/decimal.js@10.4.3/decimal.min.js"></script>
// 创建Decimal对象(推荐使用字符串初始化以避免初始精度损失)
const a = new Decimal('0.1');
const b = new Decimal('0.2');
// 进行加法运算
const sum = a.plus(b);
console.log(sum.toString()); // 输出 '0.3'
基本运算
decimal.js 提供了丰富的数学运算方法。
const x = new Decimal('10');
const y = new Decimal('3');
// 加法
x.plus(y) // 13
// 减法
x.minus(y) // 7
// 乘法
x.times(y) // 30
// 除法
x.dividedBy(y) // 3.3333333333333333333
// 取模
x.mod(y) // 1
// 幂运算
x.pow(2) // 100
// 平方根
x.sqrt() // 3.162277660168379332
链式调用与比较
支持链式调用,让连续运算更简洁。
// 链式调用示例:(0.1 + 0.2) * 10 / 3
const result = new Decimal('0.1').plus('0.2').times('10').dividedBy('3');
console.log(result.toString()); // 输出 "1"
// 比较大小
const num1 = new Decimal('0.1');
const num2 = new Decimal('0.2');
console.log(num1.lessThan(num2)); // true
console.log(num1.equals('0.1')); // true
精度与格式控制
可以全局设置精度和舍入模式,也支持灵活的结果格式化。
// 全局设置精度为4位,舍入模式为四舍五入
Decimal.set({ precision: 4, rounding: Decimal.ROUND_HALF_UP });
const num = new Decimal('1.23456');
console.log(num.toString()); // 输出 "1.2346"
// 格式化输出
const money = new Decimal('12345.6789');
console.log(money.toFixed(2)); // "12345.68"
console.log(money.toPrecision(6)); // "12345.7"
💎 实践建议
- 初始化推荐字符串:创建 Decimal 对象时,强烈推荐使用字符串(如
new Decimal('0.1'))而非数字字面量(如new Decimal(0.1)),以防止数字在传入构造函数前就因 JavaScript 自身的精度问题而失真。 - 结果输出:运算结果应优先使用
.toString()或.toFixed()转换为字符串使用。谨慎使用.toNumber()将其转回原生的 Number 类型,因为这可能再次引入精度问题。 - 性能与配置:根据实际业务需求(如金融计算通常只需2位小数)通过
Decimal.set配置合适的精度,避免不必要的计算开销。
decimal.js 的开源地址和相关资源如下:
📂 官方开源地址
- GitHub 仓库:https://github.com/MikeMcl/decimal.js
- 官方 API 文档:http://mikemcl.github.io/decimal.js/
💡 相关资源与同类库
decimal.js 的作者 MikeMcl 还开发了另外两个流行的数学运算库,它们各有特点,你可以根据项目需求选择:
| 库名称 | 特点 | 适用场景 | GitHub 地址 |
|---|---|---|---|
| big.js | 体积最小,功能侧重基本运算。 | 简单的金融计算等对体积敏感的基础运算。 | https://github.com/MikeMcl/big.js/ |
| bignumber.js | 功能介于三者之间,支持二进制运算。 | 一些加密计算场景。 | https://github.com/MikeMcl/bignumber.js/ |
| decimal.js | 功能最全,支持三角函数等高级运算。 | 科学计算等复杂场景。 | https://github.com/MikeMcl/decimal.js |
此外,还有一个功能更全面的数学库 math.js,它内部也依赖了 decimal.js,提供了包括单位转换、矩阵等在内部也依赖了 decimal.js,提供了包括单位转换、矩阵等更强大的功能。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
















