Number类型数据进行计算时,需将数据转换成二进制数据计算,得出结果再转换成十进制,且Number类型是64位双精度,因此:
0.1转换成二进制时是无限循环小数0.0001100110011 … 转换过程发生精度丢失,0.2转换成二进制时是0.0011001100110011…转换过程发生精度丢失,因此计算结果为0.30000000000000004,
因此number类型的0.1+0.2 != 0.3
当然也会出现一些特殊情况,比如:
看二进制数据计算情况应该是精度丢失刚好互补了吧 …
那么如何比较浮点数据计算情况呢?
Number提供了一个属性EPSILON表示最小精度值,那么0.1+0.2等不等于0.3就可以这么比较:
Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON