为什么JS中0.1 + 0.2 !=0.3 ?

  

  ,JS中数字运算时,有一个叫做数字运算中的精度缺失的问题,这篇文章,就带着大家了解下JS运算中精度的缺失问题。   

  

  首先我们先来看一个例子:   

  

     

  <中心>   为什么JS中0.1 + 0.2 !=0.3 ?”> </中心
  <p>
  <br/>
  </p>
  <p>
  这里0.1 + 0.2 !=0.3这个就是我们要解决的问题了。
  </p>
  <p>
  要弄清这个问题的原因,首先我们需要了解下在计算机中数字是如何存储和运算的。在计算机中,数字无论是定点数还是浮点数都是以多位二进制的方式进行存储的。
  </p>
  <p>
  在JS中数字采用的IEEE
  754年的双精度标准进行存储,我们可以无需知道他的存储形式,只需要简单的理解成就是存储一个数值所使用的二进制位数比较多而已,这样得到的数会更加精确。
  </p>
  <p>
  这里为了简单直观,我们使用定点数来说明问题。在定点数中,如果我们以8位二进制来存储数字。
  </p>
  <p>
  对于整数来说,十进制的35会被存储为:00100011其代表2 ^ 5 + 2 + 2 ^ 0 ^ 1。
  </p>
  <p>
  对于纯小数来说,十进制的0.375会被存储为:0.011其代表1/2 ^ 2 + 1/2 ^ 3=1/4 + 1/8=0.375
  </p>
  <p>
  而对于像0.1这样的数值用二进制表示你就会发现无法整除,最后算下来会是
  0.000110011 ....由于存储空间有限,最后计算机会舍弃后面的数值,所以我们最后就只能得到一个近似值。
  </p>
  <p>
  在JS中采用的IEEE
  754年的双精度标准也是一样的道理,我们且不管这个标准下的存储方式跟定点数存储有何不同,单单在这一点上他们都是相同的,也就是存储空间有限,当出现这种无法整除的小数的时候就会取一个近似值,在js中如果这个近似值足够近,似那么js就会认为他就是那个值。
  </p>
  <p>
  比较拗口,举个例子:
  </p>
  <p>
  
  </p>
  <中心>
  <img src=为什么JS中0.1 + 0.2 !=0.3 ?