返回文章列表

为什么支付系统禁止浮点金额

解释 CHINAUSDT 用整数最小货币单位记账、先流水后余额、按订单幂等结算的原因,以及对接时 amount 字段该怎么传。

收银台里每一分钱都要能和流水对上。浮点(float/double)在进制转换时会产生无法解释的尾差,所以 CHINAUSDT 全链路禁用浮点金额

规则

  1. 金额用整数最小单位:例如 USDT 按合约精度记最小单位;法币按「分」。
  2. 先写流水,再改余额,两者在同一数据库事务里。
  3. 按订单幂等结算:同一笔订单只结算一次,重复回调不能加两次钱。

费率计算使用整数运算(如 floor(base * bps / 10000) + fixed),避免中间结果漂浮。

对接注意

  • 下单字段 amount 必须是整数最小单位,不要传 19.9 这种十进制字符串当浮点解析。
  • 展示给用户时再格式化;对账与签名以整数为准
  • 若你的业务系统内部用小数,边界请在接入层一次性换算并单测 0、1、进位、并发加减。

这不是「洁癖」,而是支付系统能对账的底线。