如 0.1 + 0.2 = 0.30000000000000004
注意,单纯的先乘后加减再除是没用的,例如600.3*100直接就等于60029.99999999999了
原因
JS中数字的本质是双精度浮点数,而浮点数用二进制表达时是无穷的,相加后再转化回十进制时就产生了截断。
解决方案
- 使用类库 Math.js、decimal.js
- 手写方案
原理通常为将浮点数转换字符串,分隔成为整数部分和小数部分,小数部分再转换为整数,计算结果后,再转换为浮点数。目前可以用parseFloat((数学表达式).toFixed(digits))
代替(调用toFixed时因精度缩小,会自动四舍五入)。
网友评论