JS数字计算时的精度问题
程序员文章站
2022-07-15 13:45:10
...
js产生精度问题的根本原因是计算机进制问题
解决精度问题的几种思路
- 使用javascript的toFixed()方法,进行四舍五入取整,但是此方法在最后一位等于5时的处理方法比较特殊,chrome浏览器测试结果如下:
1.005.toFixed(2)
"1.00"
1.0051.toFixed(2)
"1.01"
所以有精确计算需求的时候不宜采用。
2.把小数转化成整数进行计算
把小数乘以对应的10的N次方,转化为整数再进行计算,如
0.006*0.1
0.0006000000000000001
6*1/10000
0.0006
但是当小数点后的位数过多时,转为整数后的计算过程可能会出现错误,如:
123456789*123456789
15241578750190520 计算错误
123456789*123456789/1000000
15241578750.19052 计算错误
123456.789*123456.789
15241578750.190521
所以此方案也不宜采用
3.把小数转为字符串,然后对字符串进行运算,这种方案实现比较复杂,但*是现成的,不需要自己造,这里推荐使用 : https://github.com/MikeMcl/decimal.js.
使用起来也比较简单,这里放个html项目中使用的例子
下一篇: 前加绩中国、信雅达高级全栈工程师:吴劲松