说真的,第一次看见 0.1 + 0.2 不等于 0.3 的时候,我还以为自己眼睛花了。Python 里敲出来是 0.30000000000000004,那一刻我真想替计算机找块豆腐撞死。道理不复杂,二进制浮点没法精确表达大多数十进制小数,可真落到自己代码里,那种"明明逻辑都对、结果就差那么一丢丢"的无力感,离谱得让人想笑。
最坑的不是算错,是它算得"差不多对"。好吧好吧我见过有人拿 float 累计订单金额,跑几万笔之后和财务对账,余额硬是差出几分钱。这 bug 单步调试根本看不出来,每笔只差个浮点尾巴,累积起来才露馅。财务可不管你什么 IEEE 754,人家只想知道那三分钱去哪了。emmm
后来学乖了,金额一律用整数存最小货币单位,也就是分,要算比例就上 Decimal 定点数。从表示层把这个坑填死,比事后写一堆四舍五入补丁强太多。还在用 float 算钱的,赶紧改,别等对账那天拍大腿。