3.

数値のカンマ区切り(number_format)

編集

説明

PHP で数値をカンマ区切り (3桁区切り) で表示するには number_format 関数を使用します。金額表示や統計レポートなど、人間が読みやすい数値表示で頻繁に使われます。

構文

string number_format(
    float $num,
    int $decimals = 0,
    string $decimal_separator  = ".",
    string $thousands_separator = ","
): string

引数

引数意味
$num変換する数値
$decimals小数点以下の桁数 (省略時は 0)
$decimal_separator小数点記号 (省略時は .)
$thousands_separator3 桁区切り記号 (省略時は ,)

実装例

<?php
echo number_format(1000);                  // 1,000
echo number_format(1234567);              // 1,234,567
echo number_format(1234.5678, 2);          // 1,234.57
echo number_format(1234567.89, 2, '.', ',');  // 1,234,567.89
echo number_format(1234567.89, 0, ',', '.');  // 1.234.568 (欧州式)
echo number_format(0.5);                  // 1 (四捨五入)
echo number_format(-1234.5, 2);            // -1,234.50

テンプレートでの利用

<p>合計: ¥<?= number_format($total) ?></p>

出力結果

1,000

よくある利用パターン

用途コード出力例
日本円 (整数)"¥" . number_format($yen)¥12,345
USD (小数2桁)"$" . number_format($usd, 2)$1,234.56
欧州式number_format($n, 2, ',', '.')1.234,56
千単位カットnumber_format($n / 1000, 1) . "k"12.3k

関連関数との比較

関数用途
number_formatカンマ区切り・小数桁制御 (本稿)
sprintf("%.2f", $n)書式文字列での整形 (カンマなし)
round($n, 2)四捨五入のみ (文字列にしない)
NumberFormatter (intl)ロケール対応の本格的な書式化 (通貨記号等)

ロケール対応の例 (intl 拡張)

$fmt = new NumberFormatter('ja_JP', NumberFormatter::CURRENCY);
echo $fmt->formatCurrency(1234567, 'JPY');  // ¥1,234,567

$en = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $en->formatCurrency(1234.5, 'USD');    // $1,234.50

注意点

  • 戻り値は文字列。数値演算をしたい場合は元の数値を残しておく
  • 四捨五入される (0.5 → 1)。誤差を避けたい金額計算は BCMathNumberFormatter
  • マイナス記号は素のハイフン (-1,234)。会計表記 (赤字括弧等) は NumberFormatter を使う
  • 非数値・nullを渡すと PHP 8 以降では型エラーになることがある。事前に (float) キャストか ?? 0
  • 桁区切りの基準は「3桁」固定。インド表記 (1,23,456) には対応していない

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. リダイレクト(header)
  2. 文字列の置換(replace)
  3. 数値のカンマ区切り(number_format)