关于js 0.1 + 0.2 != 0.3 的问题
问题:console.log(0.1 + 0.2 == 0.3) // false
最近又看了一下《javaScript高级程序设计》这本书,看到书里面这样一个问题。经过整理和个人理解在这里记录一下。
分析问题原因:
我们日常使用的数字是10进制的数,而计算机使用的是2进制的数字。不是所有的小数都能用2进制来准确的表达出来,把0.1 和 0.2 转化为2进制的话是一个无限循环的小数,计算机来处理这件事情的时候把最接近0.1和最接近0.2的小数加在一起然后返回出来,虽然无限接近0.1和0.2,但是他们相加依然不能准确的得到0.3。这样0.1 + 0.2 得到的结果是 0.30000000000000004 这样一个数字。
简单来说就是计算机在计算的时候把10进制数字转化为2进制然后再转化为10进制出现了误差。
如何避免:
1、计算小数的时候先乘以10的n次方,然后对结果在除以10的n次方。
2、精度要求不是特别高的时候也可以使用保留小数点后几位的方式来进行计算(toFixed())。
还没有评论,来说两句吧...