先说结论:浮点数别拿 == 直接比,涉及钱和计数的地方干脆别用浮点。
其实
前几天调一段统计逻辑,两个小数一加怎么都对不上,打印出来是 0.30000000000000004。原因不复杂,0.1 和 0.2 在二进制里都是无限循环,存不精确,加完自然带误差。这不是你代码写错了,是 IEEE 754 的固有特性,谁写都这德性。
踩坑的重灾区是相等判断。你写 if (a == 0.3) 基本永远进不去,正确姿势是上 epsilon 容差:abs(a - 0.3) < 1e-9。就差一个等号,结果天差地别。
最要命的是金额。见过有人拿 float 跑账单,几分钱的误差累积到最后对账直接对崩,查了一整晚。钱、库存、计数这类必须精确的场景,老老实实用整数(比如按分存)或者 decimal,一步到位,别给自己埋雷。
浮点本来就是给科学计算凑合用的近似值,落到账本上就是隐患,这坑踩过一次就长记性了。