探讨js小数运算不准确问题

94 阅读1分钟
    0.5 - 0.4 === 0.1

答案是不相等。 记下来探讨计算机对小数的存储精度的问题。

小数如何转换成二进制?(由于计算机是以二进制存储的)

例子:0.125如何转换成二进制(乘2取整,顺序排列)

      0.125 * 2 = 0.25  // 取整为 0
      0.25 * 2 = 0.5   //取整为 0
      0.5 * 2 = 1.0   //取整为 1
      //0.125 转换成二进制 001

接下来探讨 0.2 转换成二进制

     0.2 * 2 = 0.4   //取整 0
     0.4 * 2 = 0.8   //取整 0
     0.8 * 2 = 1.6  //取整 1
     0.6 * 2 = 1.2  //取整 1
     0.2 *2 = 0.4    //取整0
     .......
     
     //可以看出十进制的0.2本身是不循环的小数 但是转换成二进制时 无限循环
     //所以这是导致小数运算时出现精度不准确的根本原因