渠道下发的对账文件里当天 1284 笔合计 386421.37,本地订单表 SUM(amount) 是 386421.38。只差一分,财务要求逐笔说明。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
SELECT order_no, amount,
amount - (SELECT SUM(fee) FROM recon WHERE recon.order_no = o.order_no) AS diff
FROM wp_orders o
WHERE DATE(paid_at) = '2026-11-10';
订单金额用 DECIMAL 存两位,对账汇总时却用 PHP 的 float 循环累加,几百笔之后浮点误差显出来。渠道文件按分累加再除以一百,两条路径的舍入点不同。这一点先确认清楚,后面就不用反复试。
「对账差一分」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
具体做法是,金额统一用整数分存,展示时再除以一百,避免中途出现浮点;对账汇总用 SQL 的 SUM 在数据库里算,别拉回 PHP 循环累加;逐笔比对按订单号左连接,差一分的单单独列出来人工核。
改完照着核一遍,重跑对账,汇总差额为 0,差异清单只剩确实漏单的那几条。
