美文网首页
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