一般做的时候需要注意一下,如果两个浮点数想加的值为0.8 而他的实际值是0.79999……需要进行处理!

解决方案 »

  1.   

    0.7999999999.toFixed(1)
      

  2.   

    这个问题我的博客有讲解可以看下https://blog.csdn.net/xsl510079027/article/details/86686551
      

  3.   

    首先,这并不是JS本身的精度问题,JS表示自己不能背这口黑锅。
    这其实就是我们计算机本身的问题,是的,你没有听错,就是电脑本身的问题。
    我们的计算机在进行内部存储数据的编码的时候,0.1本身就不是一个精确的数字0.1,它的误差极小,以至于计算机将其显示成0.1。
    当我们的代码在被计算机编译的时候,0.1会被计算机解码为一个与真实的0.1本身极为相近的计算机内部编码数字,即是0.000110011001 1001...,同样的0.2和0.3等等也一个道理。也就说,在计算机还没有开始的时候,一个极小的舍入错误就已经产生了,这也是为什么我们所见到的结果与我们所预想的不一样的根本原因。
    说了这么多,那为什么最后会等于0.7999999999999999 这样一个结果呢?这是因为我们所使用的双精度浮点数的小数部分最多只能支持 52 位两个无限循环的二进制数都分别在其第52位处截断相加,最终就会得到这一结果。
    至于处理的办法,楼上的老哥的博客写了是用toFixed,确实,这样也可以,emmm,但是怎么嗦呢,其实我不喜欢这种解法。
    我个人的解决方法倾向于将数据本身乘以10的n次方最后再除以N次方的方法来解决。因为我们的计算机中的二进制可以精确地表示位数有限且分母是2的倍数的小数,这样一来的换算就没有浮点数舍入误差啦~