1. 0.1 + 0.2 !== 0.3
JavaScript中数字采用的IEEE 754的双精度标准进行存储,我们可以无需知道他的存储形式,只需要简单的理解成就是存储一个数值所使用的二进制位数比较多而已,这样得到的数会更加精确。
而对于像0.1这样的数字用二进制表示你就会发现无法整除,最后算下来会是 0.000110011……由于存储空间有限,最后计算机会舍弃后面的数字,所以我们最后就只能得到一个近似值。
在js中如果这个近似值足够近似,那么js就会认为他就是那个值。下面看个例子,一样在控制台输出:
es6提供了Number.EPSILON,这个值等于2^-52,这个值非常非常小,在底层计算机已经帮我们运算好,并且无限接近0,但不等于0,这个时候我们只要判断误差值在这个范围内就可以说明是相等的。 function numbersequal(a,b){ return Math.abs(a-b)<Number.EPSILON; } 只需要判断
2.