计算机只能存储二进制,对于小数,计算机的转换规则是取得小数、乘2取整、顺序排列

比如小数0.125,转换成二进制就是01

  1. 取小数:0.125;乘2:0.125 × 2 = 0.5;取整:0
  2. 取小数:0.5;乘2:0.5 × 2 = 1.0;取整:1
  3. 取小数:0.0,已经为0了,可以停止

但比如小数0.2

  1. 取小数:0.2;乘2:0.2 × 2 = 0.4;取整:0
  2. 取小数:0.4;乘2:0.4 × 2 = 0.8;取整:0
  3. 取小数:0.8;乘2:0.8 × 2 = 1.6;取整:1
  4. 取小数:0.6;乘2:0.6 × 2 = 1.2;取整:1
  5. 取小数:0.2;乘2:0.2 × 2 = 0.4;取整:0
  6. ……

0.2转换成二进制后成为了一个循环二进制小数00110011…,这样没完没了了

但计算机肯定不能存一个无限循环,所以会约掉

这便是计算机对小数运算不精确的本质原因