在JS中有一个经典的问题,就是 0.1 + 0.2 为什么不等于 0.3。在JS中输入 `0.1 + 0.2 === 0.3` 返回的结果是 false,说明JS认为两侧的结果不相等,这似乎违背了数学常识。 实际上这并非 JavaScript 这一门编程语言的问题,各种编程语言对于类似**浮点数的计算**都不太能把握得住。 计算机中,数字都是以二进制的形式存储的,包括在计算的过程中。虽然我们看到的都是十进制的数字,但是实际上计算机是将十进制的数字转换为二进制之后计算然后再输出十进制的。 简单来说就是计算机将 0.1 和 0.2 这两个数字转换为二进制存储后计算,然后将计算结果再转换为十进制呈现。小数转为二进制的规则是小数乘以2然后取整数部分,不断循环直至小数部分为0。但是 0.1 和 0.2 这两个小数转为二进制的时候都会存在无限循环的情况,而`IEEE754`标准规定存储的二进制最大位数为从第一个1开始的后**53**位,最后第54位采用0舍1入的方式,也即是近似存储。 正式由于这样才导致了计算时的误差。也就是我们看见的 > 0.1 + 0.2 = 0.30000000000000004 (小数点后17位) 由于存储的结果是近似值,那么计算出的结果自然也不准确,因此计算结果最后转换为十进制的时候就不是严格等于0.3了。