通貨の小数点以下桁数と補助単位の解説
ISO 4217における通貨の補助単位と小数点以下桁数の完全ガイド。JPYが0桁、KWDが3桁の理由と、コードでの正しい処理方法。
Standards
詳細な説明
通貨の補助単位を理解する
ISO 4217では、各通貨が日常取引で使用される補助単位(小数点以下桁数)を指定しています。一見シンプルなこのプロパティが、金融ソフトウェアの多くのバグの原因です。
通貨別の小数点以下桁数
小数点以下0桁(補助単位なし):
- JPY(日本円)— 最小単位は1円
- KRW(韓国ウォン)— 最小単位は1ウォン
- VND(ベトナムドン)— 最小単位は1ドン
小数点以下2桁(最も一般的):
- USD — 100セント = 1ドル
- EUR — 100セント = 1ユーロ
- GBP — 100ペンス = 1ポンド
小数点以下3桁:
- KWD(クウェートディナール)— 1000フィルス = 1ディナール
- BHD(バーレーンディナール)— 1000フィルス = 1ディナール
- OMR(オマーンリアル)— 1000バイサ = 1リアル
コードでの重要性
// 間違い:すべての通貨が小数点以下2桁と仮定
function toMinorUnits(amount, currency) {
return Math.round(amount * 100); // JPY、KWDで壊れる
}
// 正しい:通貨固有の小数点以下桁数を使用
const MINOR_UNITS = { USD: 2, EUR: 2, JPY: 0, KWD: 3 };
function toMinorUnits(amount, currency) {
const decimals = MINOR_UNITS[currency] ?? 2;
return Math.round(amount * Math.pow(10, decimals));
}
よくある落とし穴
- 2桁を仮定:最も一般的なバグ。各通貨の補助単位を必ず確認
- 浮動小数点演算:JavaScriptで
0.1 + 0.2 !== 0.3。整数(補助単位)またはDecimalライブラリを使用 - 丸めルール:一部の通貨は0.05(CHF)、0.50(HUF)、10(実際のKRW)に丸める
- 表示と保存:補助単位(整数)で保存し、適切なフォーマットで表示
ユースケース
決済システム、価格設定エンジン、会計モジュールを構築するすべての開発者は、通貨の補助単位を正しく処理する必要があります。不正確な小数処理は実際の金銭的損失を引き起こします — 100倍の過大請求(JPYを2桁として扱う)や1000倍の過少請求(KWDを0桁として扱う)。Stripeなどの決済プロセッサーは補助単位での金額を要求し、不正確な値のリクエストを拒否します。