测试时支付一分钱,实际扣款显示一元,对账金额全部错位。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

amount = int(round(yuan * 100))
// 展示
(yuan / 100).toFixed(2)

接口要求以分为单位,页面提交的是元,转换时只做了一端处理。这一点先确认清楚,后面就不用反复试。

「支付金额单位」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

具体做法是,统一以最小货币单位传输;展示层再做换算;入库使用整型避免精度问题。

改完照着核一遍,扣款金额与页面显示一致,对账无差异。

作者 9823189