通貨の小数点以下桁数と補助単位の解説

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));
}

よくある落とし穴

  1. 2桁を仮定:最も一般的なバグ。各通貨の補助単位を必ず確認
  2. 浮動小数点演算:JavaScriptで0.1 + 0.2 !== 0.3。整数(補助単位)またはDecimalライブラリを使用
  3. 丸めルール:一部の通貨は0.05(CHF)、0.50(HUF)、10(実際のKRW)に丸める
  4. 表示と保存:補助単位(整数)で保存し、適切なフォーマットで表示

ユースケース

決済システム、価格設定エンジン、会計モジュールを構築するすべての開発者は、通貨の補助単位を正しく処理する必要があります。不正確な小数処理は実際の金銭的損失を引き起こします — 100倍の過大請求(JPYを2桁として扱う)や1000倍の過少請求(KWDを0桁として扱う)。Stripeなどの決済プロセッサーは補助単位での金額を要求し、不正確な値のリクエストを拒否します。

試してみる — Currency Code Reference

フルツールを開く