var a = 0.1;
var b = 0.2;
if((a+b) == 0.3){
console.log('yes');
}else{
console.log('no');
}
// no
这个计算的结果no,是不是有点意想不到?
0.1+0.2!=0.3,这似乎与我们的认知不相符,为什么呢?让我们打印一下a+b看看~
var a = 0.1;
var b = 0.2;
console.log(a+b);
// 0.30000000000000004
0.1加0.2的结果居然是0.30000000000000004
让我们转换成二进制看看
var a = 0.1;
var b = 0.2;
var c = 0.30000000000000004;
var a2 = a.toString(2);
var b2 = b.toString(2);
var c2 = c.toString(2);
console.log(a2); // 0.00011001100110011
console.log(b2); // 0.00110011001100110
console.log(c2); // 0.01001100110011001
// a2+b2 = 0.01001100110011001(二进制运算)
由此可见,在二进制的计算中,a2+b2确实等于c2。由于在计算机里,所有的浮点数其实都是用0或1存储的,所以再由二进制转换回浮点数的时候,就会出现极小的误差。
因此,我们一定要慎用浮点数的计算比较!
网友评论