如何解决在JS中0.1+0.2!=0.3的问题
在计算机中数字是以多位二进制的方式进行存储,在js中数字采用的是双精度标准进行存储。
在谷歌中可以用:
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)); //true
在IE中可以用以下的兼容方式
//解决兼容性问题
Number.EPSILON = (function() {
return Number.EPSILON ? Number.EPSILON : Math.pow(2, -52);
})();
//上面是一个自调用函数,当js文件刚加载到内存中,就会去判断并返回一个结果,相比if(!Number.EPSILON){
// Number.EPSILON=Math.pow(2,-52);
//}这种代码更节约性能,也更美观
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));