首先要说的是,0.1+0.2不等于0.3
JS中采用的IEEE 754的双精度标准,计算机内部存储数据的编码的时候,0.1在计算机内部根本就不是精确的0.1,而是一个有舍入误差的0.1。当代码被编译或解释后,0.1已经被四舍五入成一个与之很接近的计算机内部数字,以至于计算还没开始,一个很小的舍入错误就已经产生了。这也就是 0.1 + 0.2 不等于0.3 的原因。
这个属于运算中精度缺失问题,通常这个时候,我做的时候会把数字放大100倍乃至更多,计算完整后再除以100,再根据规定进行四舍五入等。
原因:计算的时候是以二进制来计算的,有些十进制并不能用准确的二进制数表示。
还有典型的其他例子:
var num = 0.7 * 180
console.log(num) // 125.99999999999999
解决,可以参考这里。
if(1000000000000000128 === 1000000000000000129){
console.log('--') // 输出这个
}else[
console.log('==')
]