如何在JavaScript浏览器环境中避免浮点数舍入误差
JavaScript 浮点数精度问题:10.04 + 0.01 结果异常的原因与解决方法
这不是浏览器的bug,是JavaScript采用IEEE 754双精度浮点数标准存储数值导致的必然现象。十进制里的0.01这类小数,转换成二进制是无限循环的二进制小数,无法被有限长度的二进制位精确存储,所以在计算时会产生精度丢失,最终出现看似不符合预期的结果。
解决方法:
- 整数运算替代浮点数:把所有数值放大为整数(比如处理金额时,把元转成分),计算完成后再缩小回原比例。示例:
// 把10.04元转成1004分,0.01元转成1分 const result = (1004 + 1) / 100; // 得到10.05 - 合理使用舍入方法:如果必须用浮点数计算,可以在运算后对结果进行舍入,但要注意
toFixed()返回的是字符串,需要转成数字:const num = 10.04 + 0.01; const fixedNum = Number(num.toFixed(2)); // 得到10.05 - 使用高精度小数库:如果涉及大量复杂的小数运算(比如金融场景),可以使用专门处理精度的JavaScript库(如decimal.js、big.js),这类库会手动处理小数的精确计算,避免原生浮点数的精度问题。
内容的提问来源于stack exchange,提问作者thomasf1
相关产品推荐
相关产品推荐

