美文网首页
0.1+0.2 !=0.3 why?

0.1+0.2 !=0.3 why?

作者: 一叶信笺飘云间 | 来源:发表于2017-12-11 23:17 被阅读7次
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存储的,所以再由二进制转换回浮点数的时候,就会出现极小的误差。

因此,我们一定要慎用浮点数的计算比较!

相关文章

网友评论

      本文标题:0.1+0.2 !=0.3 why?

      本文链接:https://www.haomeiwen.com/subject/yskovxtx.html