为什么支付系统禁止浮点金额
解释 CHINAUSDT 用整数最小货币单位记账、先流水后余额、按订单幂等结算的原因,以及对接时 amount 字段该怎么传。
收银台里每一分钱都要能和流水对上。浮点(float/double)在进制转换时会产生无法解释的尾差,所以 CHINAUSDT 全链路禁用浮点金额。
规则
- 金额用整数最小单位:例如 USDT 按合约精度记最小单位;法币按「分」。
- 先写流水,再改余额,两者在同一数据库事务里。
- 按订单幂等结算:同一笔订单只结算一次,重复回调不能加两次钱。
费率计算使用整数运算(如 floor(base * bps / 10000) + fixed),避免中间结果漂浮。
对接注意
- 下单字段
amount必须是整数最小单位,不要传19.9这种十进制字符串当浮点解析。 - 展示给用户时再格式化;对账与签名以整数为准。
- 若你的业务系统内部用小数,边界请在接入层一次性换算并单测 0、1、进位、并发加减。
这不是「洁癖」,而是支付系统能对账的底线。