先给结论:浮点数直接拿 == 比相等,基本是在跟自己过不去。
0.1 和 0.2 在二进制里都是无限循环小数,存进 IEEE 754 的时候就已经被截过一遍了。两个数各自舍入再相加,结果跟 0.3 的二进制表示差了那么一截尾数。打印出来看着都是 0.3,但 0.1 + 0.2 == 0.3 返回的是 false。我头回踩这坑是算一笔账,循环累加了一百次,最后跟预期对不上,盯着屏幕发了半天呆。
正确姿势是用误差阈值,也就是 epsilon,判断 abs(a - b) < 1e-9 就当相等。要是碰上钱,别用 float,老老实实上整数分或者 decimal 类型,那才稳。
这坑谁都得踩一回,踩完就长记性了。