前端精确数字运算:用 BigNumber.js 解决 JS Number 精度问题
JavaScript 的 Number 类型基于 IEEE 754 双精度浮点数标准,有效数字限制在 53 位。在处理大整数或高精度小数时,很容易出现精度丢失。比如经典的 0.1 + 0.2 !== 0.3,或者超过 2^53 - 1 的大数比较失效。在金融、区块链等对数值准确性要求极高的场景下,原生类型往往不够用。
BigNumber.js 正是为了解决这个问题而生。它内部使用字符串模拟十进制运算,完全规避了二进制浮点误差,支持任意精度计算,且不会自动四舍五入,除非你显式指定。
为什么需要它?
精度丢失的典型表现
原生 JavaScript 在处理以下情况时会'翻车':
// 小数运算精度问题
console.log(0.1 + 0.2); // 输出:0.30000000000000004
// 大数精度丢失问题
// 超过 2^53 - 1 (9007199254740991) 的数字会丢失精度
console.log(15615616981519815 === 15615616981519816); // 输出:true(错误)
实际业务中的痛点
- 金融计算:利息、汇率、交易金额不能差一分钱。
- 区块链与加密货币:ETH 的 wei 单位转换,1 ETH = 10^18 wei,原生除法容易出错。
- 科学计算:天文距离、化学分子量等超大数值。
方案:BigNumber.js 简介
BigNumber.js 专注于十进制精度运算,核心特性包括:
- 任意精度:不受 53 位有效数字限制。
- 不可变对象:每次操作返回新实例,不修改原对象。
- 丰富 API:支持加减乘除、幂运算、取模、格式化等。
- 灵活配置:可设置全局或局部的精度、舍入模式。
实战:安装与配置
引入库
推荐使用 npm 安装:
npm install bignumber.js
代码中引入方式如下:
const BigNumber = require('bignumber.js');
// 或者 ES6 模块语法
import BigNumber from ;


