测试时支付一分钱,实际扣款显示一元,对账金额全部错位。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
amount = int(round(yuan * 100)) // 展示 (yuan / 100).toFixed(2)
接口要求以分为单位,页面提交的是元,转换时只做了一端处理。这一点先确认清楚,后面就不用反复试。
「支付金额单位」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
具体做法是,统一以最小货币单位传输;展示层再做换算;入库使用整型避免精度问题。
改完照着核一遍,扣款金额与页面显示一致,对账无差异。