昨天帮一朋友查账,他程序里用float存金额,月底对账差了一分钱,俩人从下午查到半夜怀疑人生。我直接跟他说,你这锅得让二进制背。
说白了0.1和0.2在二进制里全是无限循环小数,计算机存不下只能硬切一刀,结果0.1+0.2算出来是0.30000000000000004这么个玩意儿,跟0.3比永远不相等。拿它做等值判断或者存钱,迟早出事。
我刚工作那会儿也踩过这坑,还跟同事拍桌子说编译器有bug,现在想想脸发烫哈哈。怎么说改法其实特简单,金额一律用整数分要么Decimal要么老老实实走字符串,比较别用==,整个误差阈值abs(a-b)<1e-9就稳了。太!
我去
这坑太经典了,谁还没被它教育过。你们还踩过啥离谱的浮点坑,说来听听。