问题
0.1+0.2=0.30000000000000004
原因
- 0.1 , 0.2 转二进制相加后,再转10进制相加;
表示为true
- ES6提供的Number.EPSILON方法;该方法无穷小于零;只要小于0,就为true
function numbersequal(a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
var a = 0.1 + 0.2,
b = 0.3;
console.log(numbersequal(a, b));
如何正确计算
- 四舍五入后返回字符串,然后转为浮点型
parseFloat((0.1 + 0.2).toFixed(10))
- 三方库解决
JavaScript 中精度问题以及解决方案
网友评论