为什么0.1 + 0.2 !== 0.3?
let a = 0.1,b = 0.2 console.log(0.1 + 0.2); //0.30000000000000004
为什么0.1+0.2不等于0.3呀?
因为计算机是通过二进制的方式存储数据的,所以计算机计算0.1+0.2的时候,实际上是计算的两个数的二进制的和。0.1的二进制是0.0001100110011001100…(1100循环),0.2的二进制是:(1100循环),这两个数的二进制都是无限循环的数。那JavaScript是如何处理无限循环的二进制小数呢?
一般我们认为数字包含整数和小数,但在js中只有一种数字类型:Number,它的实现遵循IEEE 754标准,使用64位固定长度来表示,也就是标准的double双精度浮点数。在二进制科学表示法中,双精度浮点数的小数部分最多只能保留52位,再加上前面的1,其实就是保留53位有效数字,剩余的需要舍去,遵从“0舍1入”的原则。
根据这个原则,0.1和0.2的二进制数相加,再转化为十进制数就是:0.30000000000000004
解决办法
可以使用保留两位小数的方法
let a =0.1,b=0.2 console.log((a+b).toFixed(2) == 0.3);