在chrome console输入console.log(0.7 + 0.1),你猜会得到什么结果?会输出0.7999999999999999,所以如果你进行这样的判断console.log(0.7 + 0.1 === 0.8),那么结果并不能如愿,会输出 false。
为什么会这样呢?引用知乎里面的一段回答:
主要问题是,你用十进制去想,0.7 是一个能准确表示的小数,而二进制却是循环小数。反过来想,就好像在三进制中 0.2 是一个很准确的数字,但在十进制中却是循环小数, 。除非用有理数表示,这些数字不能精确地用有限位的二进制表示,产生误差,0.7+0.1计算的结果也是有误差。把有误差的结果显示时,转换成十进位显示的算法发现该值与 0.8 相比,较接近 0.7999999999999999,所以显示后者。
那么怎样评断(0.7 + 0.1)与0.8是否相等呢?
我的想法是作差,差值的绝对值与一个很小的数对比(比如1e-7),如果差值小于此数,那么可以认为是相等的。