以JS为例
简短的解释就是,浮点数在计算机中大部分都是近似
0.1 可以表示为
0.000110011001100110011001100110011001100110011001100110…
其后是一个无限循环的小数,计算机只能截断,很显然截断后的数就已经是0.1的近似值了,但是两个0.1的在计算机的表示是一致的,所以0.1==0.1是成立的
而经过计算后的浮点数,是两个近似值计算得到值,计算机不能把他识别为是1位小数0.3而是0.3000…4,与真计算值的表示方式很可能是不相同的,所以他们不等。
再来解释为什么0.1+0.5==0.6是true
因为0.5在计算机是可以准确表示为0.1000000000的,那么一个被截断的数和他相加后得到的虽然也是一个近似值,但是0.1小数第一位后面的0和1,在0.1+0.5计算中是没有变过的,他们的表示方式和0.6小数第一位后面的0和1是相同的
所以即使这是一个0.6的近似数,比较结果是true
我还有一个疑问是,计算机如何把0.0001100110011001…输出的时候转换为0.1?