看到此问题记录一下为什么0.1+0.2!=0.3,如何使他们相等
笔记:
在JS中使用64位双精度来存储数字,在二进制科学表示法中,双精度浮点小数只能保存52位+1位符号位共53位有效数字,超过部分会被舍去(0舍1入),造成精度丢失。
原因
0.1二进制
1.1001100110011001100110011001100110011001100110011010*2^-4
0.2二进制
0.11001100110011001100110011001100110011001100110011010*2^-3
0.1+0.2 二进制
0.010011001100110011001100110011001100110011001100110100
转为十进制为
0.30000000000000004
故而0.1+0.2!=0.3。
解决办法
1.将0.1与0.2转为整数进行计算
var a=0.1,b=0.2,
result=(a*100+b*100)/100
console.log(result===0.3) //true
2.利用ES6中极小数Number.EPSILON判断
var a=0.1,b=0.2,c=0.3
var result=(Math.abs(a+b-c)<Number.EPSILON);
console.log(result) //true