JavaScript | 数値を指定したロケールに応じた形式で文字列に変換(toLocaleString() メソッド)

javascrpit JavaScript
スポンサーリンク

toLocaleStringオプション引数 を初心者向けに噛み砕いて、実例つきで詳しく説明します。ポイントごとにコードと出力例を載せるので、試しながら理解できるはずです。

概要(おさらい)

num.toLocaleString(locales, options) は内部で Intl.NumberFormat を使い、ロケール(地域)ごとの書式(桁区切り、少数点、通貨記号、パーセント表記など)で数値を文字列に変換します。locales を省くと実行環境のデフォルトロケールが使われます。

基本オプション一覧(まずこれを押さえる)

  • style"decimal"(通常)、"currency"(通貨)、"percent"(パーセント)、"unit"(単位)。デフォルトは "decimal"
  • currencystyle: "currency" のときに必須。ISO 4217 の通貨コード(例:"USD", "JPY", "EUR")。
  • currencyDisplay:通貨の表示方法。"symbol"($や¥、デフォルト)、"code"(USD)、"name"(英語名 “US dollars” など)、"narrowSymbol"(狭いシンボル)。
  • minimumFractionDigits / maximumFractionDigits:小数点以下の最小/最大桁数(整数は 0〜20 の範囲で指定)。Currency の場合は通貨の小数単位(例:JPY は 0)を既定とする実装が多い。
  • minimumSignificantDigits / maximumSignificantDigits:有効数字(有効桁数)を指定したいときに使う。
  • useGrouping:桁区切り(千区切り)を有効にするか。true/false または "auto" など(ブラウザ実装により細かい値がある)。
  • notation"standard"(通常), "scientific"(指数表示), "engineering"(工学表記), "compact"(縮約表示 1.2K のような表記)を指定可能。compact を使うと compactDisplay"short"/"long")も使えます。

(細かい/新しいオプションやブラウザ差異は MDN の Intl.NumberFormat ページ参照が確実です。)

具体例(コード+出力) — 実際にどんな文字列が返るかを確認

1. 通常の小数(ロケール指定なし)

const n = 8242.56;
console.log(n.toLocaleString()); // 例: "8,242.56" (環境のロケール次第)
JavaScript

(ロケールによって "8.242,56" や空白区切り "8 242,56" になる。)

2. 小数桁数を指定(minimumFractionDigits / maximumFractionDigits)

const n = 2;
console.log(n.toLocaleString('en-US', { minimumFractionDigits: 2 })); // "2.00"
console.log(1234.567.toLocaleString('en-US', { maximumFractionDigits: 1 })); // "1,234.6"
JavaScript
  • minimumFractionDigits は表示する小数の下限(足りない場合は0で埋める)。
  • maximumFractionDigits は丸めの上限(四捨五入に相当する動き)。

3. 通貨表示(style: "currency")

const price = 1234.5;
console.log(price.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' })); // "¥1,235"(JPYは小数なし)
console.log(price.toLocaleString('en-US', { style: 'currency', currency: 'USD' })); // "$1,234.50"
JavaScript
  • currency は必須。通貨により標準的小数桁数が異なる(例:JPY は 0、USD は 2 が普通)。

4. 通貨の表示方法を変える(currencyDisplay)

const n = 1000;
console.log(n.toLocaleString('en-US', { style: 'currency', currency: 'EUR', currencyDisplay: 'symbol' })); // "€1,000.00"
console.log(n.toLocaleString('en-US', { style: 'currency', currency: 'EUR', currencyDisplay: 'code' }));   // "EUR 1,000.00"
console.log(n.toLocaleString('en-US', { style: 'currency', currency: 'EUR', currencyDisplay: 'name' }));   // "1,000.00 euros"(ロケール次第)
JavaScript

(表示はロケールと実装で異なる。)

5. パーセント表示(style: "percent")

const ratio = 0.1234;
console.log(ratio.toLocaleString('en-US', { style: 'percent', minimumFractionDigits: 1 })); // "12.3%"
JavaScript
  • 内部では数値を 100 倍して % を付ける形式。

6. 短縮表記(notation: "compact") — 1000 → “1K” のような表示

const big = 12345;
console.log(big.toLocaleString('en-US', { notation: 'compact', compactDisplay: 'short' })); // "12K"(環境により "12K" や "12 thousand" など)
JavaScript
  • compactcompactDisplay"short"/"long")で短い/長い表現を選べます。

7. 指数表示(notation: "scientific")

const n = 123456;
console.log(n.toLocaleString('en-US', { notation: 'scientific', maximumFractionDigits: 2 })); // "1.23E5"(表記はロケール/実装に依る)
JavaScript
  • 科学的表記や工学表記("engineering")も指定できます。

有効数字 vs 小数桁(混乱しやすいポイント)

  • minimumFractionDigits / maximumFractionDigits は小数点以下の桁数を直接制御。小数点以下の表示を揃えたいときに使う。
  • minimumSignificantDigits / maximumSignificantDigits は数全体の「有効桁数」をそろえる。例:12345 を有効桁数 3 にすると 1.23e412,300 のような出力になる場合がある(notation によって挙動が変わる)。

注意点・実務的なコツ

  1. 整数リテラルに直接呼ぶと構文エラー
    1000.toLocaleString() は構文エラーになります。(1000).toLocaleString() のように括るか 1000 .toLocaleString() と空白を入れてください。
  2. ブラウザ/エンジン差がある
    実装差(例:円のシンボル位置、空白の扱い、小数の丸め結果の細かい差)は残ります。大量にフォーマットする場合は new Intl.NumberFormat(locales, options) を作って format() を繰り返す方が高速です。
  3. 通貨コードは ISO 4217 を使う(例:USD, JPY, EUR)。style: 'currency' のときは currency を必ず指定します。
  4. 丸めはオプションで制御
    maximumFractionDigits を設定すると四捨五入に近い結果で丸められます。金融計算など正確な丸めが必要な場合は数値計算自体を慎重に(整数演算や専用ライブラリを検討)行ってから表示に toLocaleString を使うのが安全です。
  5. パフォーマンス
    たくさんの数値を頻繁にフォーマットするなら、毎回 toLocaleString(内部で Intl.NumberFormat を作る実装が多い)を呼ぶより、const nf = new Intl.NumberFormat(locale, options); nf.format(n) を複数回使う方が速くなります。

よくある用途パターン(短いまとめと例)

  • 通貨表示(自動的に小数桁数を通貨の規定に合わせたい)→ style: 'currency', currency: 'XXX'
  • 小数桁を揃えたい(価格表など)→ minimumFractionDigitsmaximumFractionDigits
  • パーセント表示→ style: 'percent'
  • 端末ロケールにあわせて千区切り・小数点を切り替えたい→ locales を省略または指定。

参考(実装仕様・詳細を深掘りしたいとき)

タイトルとURLをコピーしました