ENGINEERING NOTE 29 / 50 · CARD
避免卡片费用计算中的浮点误差
金额必须有明确币种和精度。累计财务金额时,不宜默认使用二进制浮点数。
本文由 OPEN RAMBO 发布。工程方案和伪代码用于说明设计,不是现有产品 API 文档;示例数字均为演示。
选择规范表示
固定币种精度可用最小单位整数,便于比较与汇总。其他资产可能需明确小数位的十进制表示。不能假设所有币种两位小数,也不能假设所有上游单位相同。
在明确边界舍入
说明百分比费用何时舍入及规则。逐行舍入可能不同于总额最后舍入。操作保留接受的价格版本,后续变价不能改变历史核算。
测试边界金额
覆盖零、最小金额、舍入临界值和最大金额。跨语言序列化整数需安全。展示两位小数不能掩盖底层算术差异。
示意流程
amount_minor = 1234
fixed_fee_minor = 50
net_minor = amount_minor - fixed_fee_minor
assert net_minor == 1184如何验收
使用精确计算比较明细与账本总额,测试包含不同精度币种。