前两天帮人看个 bug,现象特别诡异:条件里明明该成立的判断,偏偏不进分支。最后定位到一句 (0.1 + 0.2) == 0.3。在脑子里这当然等于,可机器不这么想。IEEE 754 底下 0.1 和 0.2 都没法用二进制精确表示,都是近似的,加完实际落到 0.30000000000000004,拿 == 直接比,自然不相等。
这种坑最烦的地方不在它难懂,而在它难复现。你本地跑十次九次没问题,换个输入、换个平台,结果就可能歪掉。尤其金额、坐标、概率这类场景,一旦拿浮点结果做相等判断,bug 往往藏得很深,等线上对账对不上才冒头。
一般的做法是别用 == 比浮点,改成两者差的绝对值小于一个容限 epsilon 就当相等。要是跟钱打交道,最稳的还是直接上整数,按分存,或者 decimal 类型,从根上绕开二进制近似这回事。
你们还踩过哪些这类"看起来不可能错"的坑?