概述
用浮点表示金额会在累计与税率计算中产生难以察觉的偏差。改用整数最小单位或精确小数、为每种币种定义舍入规则、把金额运算与格式化收敛到单一模块,并测试舍入边界与零小数位币种,可从根源上避免对不上账。
关键步骤
- 确认金额以整数最小单位或精确小数存储,绝不使用浮点。
- 按币种与操作定义舍入规则。
- 把运算与格式化集中到一个模块。
- 测试舍入边界、零小数位币种与大额。
验证
- 测试显示无浮点漂移。
- 零小数位币种处理正确。
- 总额与税额的舍入有文档且一致。
- 金额表示与策略有记录。
决策点
整数最小单位可规避类型陷阱且序列化干净;舍入策略须选定一种并记录,混用会导致税额对不上。
适用范围
本条目围绕「货币精度评审工作流」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
// store integer minor units
const price = 1999; // $19.99
const total = price * qty; // integer math
const display = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(total / 100);