000000001000。它没有小数点,而是用「货币的最小单位」(如分)表示的整数。到底多少钱,要看货币代码(DE49)有几位小数。
| DE4 原值 | 货币(小数位) | 实际金额 |
|---|---|---|
000000001000 | SGD / USD (2) | 10.00 |
000000001000 | JPY (0) | 1000 |
000000001000 | BHD (3) | 1.000 |
换算公式:实际金额 = 原值 ÷ 10小数位。小数位由 ISO 4217 货币码规定(大多数是 2 位,日元 0 位,部分中东货币 3 位)。
| 货币 | 数字码(DE49) | 小数位 | 1234500 表示 |
|---|---|---|---|
| JPY 日元 | 392 | 0 | ¥1,234,500 |
| KRW 韩元 | 410 | 0 | ₩1,234,500 |
| USD / EUR / CNY | 840 / 978 / 156 | 2 | 12,345.00 |
| KWD 科威特第纳尔 | 414 | 3 | 1,234.500 |
| BHD、JOD、OMR、TND | 048、400、512、788 | 3 | 1,234.500 |
注意 DE49 放的是 ISO 4217 的数字码(392),不是字母码(JPY)——报文和内部系统做映射时,这里经常搞混。
把 金额 × 100 写死,在 0 位和 3 位小数的币种上会直接算错金额,而且报文本身完全合法。一笔 5,000 日元这么发出去,字段里是 500000,而日元零小数位——那就是 50 万日元,多了整整 100 倍,而且它会正常授权通过。
反方向一样糟:科威特第纳尔的金额除以 100,会少收 10 倍。这两种错都是静默的——不报错、不触发校验,只是一个错误的数字,等对账时才被发现,那时往往已经过了几天。
维护一张「币种 → 小数位」的表,所有换算都走这张表,不要让字面量 100 出现在任何金额附近。
不只是 DE4。DE5(结算金额)、DE6(持卡人入账金额)以及 EMV 的 9F02(授权金额)标签,都遵循同样的最小单位规则。而且在跨境交易里,DE5/DE6 的币种可能和 DE4 不同,各自有各自的小数位——要分别看 DE49、DE50、DE51,别默认它们一致。
👉 本站解析工具会自动按货币码把金额换算好显示。相关:字段速查(DE4/DE49)。