最可靠的方式是使用第三方高精度计算库。decimal.js适合金融场景,api完整;bignumber.js轻量稳定,兼容性好;big.js极简专注,包体积小;math.js面向科学计算,支持表达式解析。

JavaScript 中处理浮点数精度丢失,最可靠的方式之一就是使用成熟的第三方高精度计算库。它们绕开原生 Number 类型的 IEEE 754 限制,提供真正可控的十进制运算能力。
decimal.js:金融与通用场景首选
专为解决十进制精度问题设计,API 清晰、功能完整,支持加减乘除、幂、开方、四舍五入、科学计数法等,且默认保留所有小数位精度。适合电商结算、财务系统、报表统计等对准确性要求极高的场景。
- 安装:
npm install decimal.js - 基本用法:
new Decimal('0.1').plus('0.2').toNumber()→0.3 - 推荐始终传入字符串初始化(如
'0.1'),避免构造时就引入原生浮点误差
bignumber.js:轻量稳定,兼容性好
比 decimal.js 更早流行,体积更小,API 简洁,社区成熟。虽数学函数略少,但加减乘除、比较、取模等核心能力完备,适合中低复杂度的精度敏感业务(如订单金额校验、库存扣减)。
- 安装:
npm install bignumber.js - 示例:
new BigNumber(0.1).plus(0.2).toString()→'0.3' - 支持链式调用和全局配置(如精度、舍入模式)
big.js:极简专注,适合嵌入式或轻量项目
从 bignumber.js 衍生出的精简版,仅保留最常用运算,无额外数学函数,包体积最小(约 4KB)。适合对包大小敏感、只需基础四则运算的前端项目或小程序。
- 不支持开方、三角函数等高级操作,但加减乘除完全可靠
- 同样建议用字符串初始化,例如:
new Big('1.005').times('2') - 在 Vue/React 组件内按需引入,几乎无性能负担
math.js:面向科学计算的全能选手
不只是高精度数字类型,而是一个完整的数学表达式引擎。支持复数、矩阵、单位、符号计算等,decimal.js 和 bignumber.js 的能力它都涵盖,还额外提供 evaluate('0.1 + 0.2') 这类字符串表达式解析。
- 适合需要动态公式执行的场景(如BI看板、配置化计算器)
- 体积较大,建议按需加载子模块(如只引入
number类型支持) - 内置多种数据类型切换,可统一管理精度策略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











