S2.03.2Currency fraction digits设计

小数位数随币种不同

别名: 货币小数位 · 次要货币单位 · cash rounding

概念解释

货币小数位(currency fraction digits)是金额显示时由币种而非 locale 决定的默认小数精度。常见货币使用两位并不构成通则:有的币种通常显示零位,有的显示三位;现金支付还可能使用不同的小数位或舍入增量。小数位是金额语义的一部分,不能从界面空间或源数字碰巧有几位来决定。

机制

Unicode LDML 的补充货币数据为币种记录 digitsrounding,并以 cashDigitscashRounding 区分现金场景。货币 pattern 虽常写成两位小数占位,但实际格式化的位数由这组币种数据或显式 API 选项覆盖。例如,日元常规显示通常为零位,巴林第纳尔为三位;瑞士法郎仍以两位记账,但现金总额可按 0.05 法郎递增舍入。舍入若在单项、税额和总计的不同阶段发生,还会造成可见分项之和与应付总额不一致。

边界

展示精度不等于计算精度,也不等于数据库精度。外汇、利率分摊、加密资产或内部定价可能需要比法定次要单位更多的计算位;最终扣款、账单和现金交付则受支付通道与业务规则约束。历史货币和规则更新会让永久硬编码失效。尾随零有时传达可支付精度,搜索结果或行情中的紧凑显示则可能有意省略;两种场景不能共享一个无上下文格式。

怎么落地

  • 以十进制定点数或明确的最小单位整数保存金额,并连同币种、舍入模式和计算尺度传递;避免用二进制浮点直接累计财务金额。
  • 默认从维护中的 CLDR/ICU 货币数据取得小数位与现金舍入;把支付机构、会计或法规要求的覆盖项显式版本化,不在组件里散落 2
  • 分开“计算尺度”“账面显示”“现金应付”三种策略;统一规定单项、折扣、税额和总计在哪一步舍入,并让分项与总额可复核。
  • 用零位、两位、三位、现金增量、负数、半值边界和大批量求和建立测试矩阵;CLDR 或业务规则升级时重跑金样本并人工复核账单。

延伸

  • 同组S2.03.1 货币符号的位置与间隔随地区不同 · S2.03.3 汇率换算需标明时点与来源 · S2.03.4 含税与不含税的显示惯例不同
  • 相邻S2.02.1 小数点与千分位符号随地区互换 · S2.04.2 单位换算的舍入会造成不一致
  • 站内检索currency fraction digits · minor currency unit · cash rounding

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/S2.03.2