Intl.NumberFormatの基本:ロケール対応の数値フォーマット

Intl.NumberFormatが各ロケールで数値をどのようにフォーマットするかを学びます。JavaScriptにおける小数点区切り、桁区切り、基本的な数値フォーマットオプションを理解します。

Intl.NumberFormat

詳細な説明

Intl.NumberFormat:ロケール対応数値の基盤

Intl.NumberFormatは最も頻繁に使用されるIntl APIです。小数点区切り、千の位の区切り、桁の順序をロケール固有の慣例に従って自動的に処理し、数値をフォーマットします。

数値フォーマットがロケールによって異なる理由

地域によって数値の表示方法が異なります:

const num = 1234567.89;

new Intl.NumberFormat('en-US').format(num);  // "1,234,567.89"
new Intl.NumberFormat('de-DE').format(num);  // "1.234.567,89"
new Intl.NumberFormat('fr-FR').format(num);  // "1 234 567,89"
new Intl.NumberFormat('hi-IN').format(num);  // "12,34,567.89"

違いに注目してください:

  • 英語(米国):カンマで桁区切り、ピリオドで小数点
  • ドイツ語:ピリオドで桁区切り、カンマで小数点
  • フランス語:細いノーブレークスペースで桁区切り、カンマで小数点
  • ヒンディー語(インド):インドの数値体系(ラーキとクローレ)を使用

主要なオプション

new Intl.NumberFormat(locale, {
  minimumFractionDigits: 2,  // 常に小数点以下2桁を表示
  maximumFractionDigits: 2,  // 小数点以下2桁を超えない
  useGrouping: true,         // 千の位の区切りを有効化
  signDisplay: 'auto',       // 負の数にマイナス記号を表示
});

useGroupingオプション

useGroupingオプションは桁区切りの使用を制御します:

  • true(デフォルト):ロケール固有の桁区切りを使用
  • false:桁区切りなし
  • "min2":グループに少なくとも2桁ある場合のみ区切る
  • "always":常に桁区切りを使用(ほとんどのロケールでtrueと同じ)

ブラウザサポート

Intl.NumberFormatはすべてのモダンブラウザ(Chrome 24以降、Firefox 29以降、Safari 10以降、Edge 12以降)とNode.js 0.12以降でサポートされています。最も広くサポートされているIntl APIの1つです。

ユースケース

数値フォーマットは、国際的なユーザーに数値を表示するすべてのアプリケーションにとって不可欠です。ECサイトは価格をフォーマットし、分析ダッシュボードはメトリクスを表示し、金融アプリケーションは口座残高を表示します。適切なロケールフォーマットがなければ、ドイツのユーザーが「1,234.56」を約1千として読む可能性があり、アメリカのユーザーは「1.234,56」に混乱するでしょう。Intl.NumberFormatを使用することでこれらの曖昧さが解消されます。

試してみる — Locale String Tester

フルツールを開く