JavaScript精度问题在项目中经常遇到,最近也是遇到了这样的问题,0.1+0.2!==0.3 才准备好好的总结下这类问题的解决方法。

JavaScript产生这类精度问题的原因

在JavaScript中所有的数值都是以IEEE-754标准的64bit双精度浮点数进行存储的

比如:0.1+0.2的运算过程

1
2
3
4
5
6
// 计算过程
0.00011001100110011001100110011001100110011001100110011010
0.0011001100110011001100110011001100110011001100110011010

// 相加得
0.01001100110011001100110011001100110011001100110011001110

0.01001100110011001100110011001100110011001100110011001110转化为十进制就是0.30000000000000004

方案一:

第三方库:mathjs 


以上的config对象的number属性设置为BigNumber就可以解决此类精度问题(运用的话去看第三库文档:https://mathjs.org/)

方案二:

toFixed方法

0.1+0.2 != 0.3

(0.1+0.2).toFixed(1)