PHPの3桁のカンマ区切りについて

採用はこちら

PHPで数値を3桁ごとにカンマ区切りで表示したい場合は、基本的に number_format() を使います。

たとえば、次のような表示にしたい場合です。

1000      → 1,000
1234567   → 1,234,567
10000000  → 10,000,000

金額、売上、PV数、会員数、在庫数、ランキング数値など、桁数の大きい数値を画面に表示するときによく使います。

特にWebサイトや管理画面では、数値をそのまま表示すると読みにくくなるため、ユーザーに見せるタイミングで3桁ごとにカンマを入れるのが一般的です。

目次

number_format()の基本的な使い方

基本の書き方

PHPで3桁カンマ区切りにするには、次のように書きます。

number_format($number)

具体例です。

<?php
$num = 1234567;

echo number_format($num);
?>

出力結果は次のようになります。

1,234,567

number_format() に数値を渡すだけで、自動的に3桁ごとにカンマを入れてくれます。

金額をカンマ区切りで表示する例

金額表示では、次のように使うことが多いです。

<?php
$price = 980000;

echo number_format($price) . '円';
?>

出力結果です。

980,000円

HTMLの中で表示する場合は、次のように書けます。

<p>価格:<?php echo number_format($price); ?>円</p>

PHPの短縮構文を使う場合は、次のようにも書けます。

<p>価格:<?= number_format($price) ?>円</p>

実務では、テンプレートファイル内でこのように使うケースも多いです。

number_format()を使うときの基本ルール

戻り値は数値ではなく文字列

重要なのは、number_format() の戻り値は数値ではなく文字列だという点です。

たとえば、次のように確認できます。

<?php
$price = number_format(1000);

var_dump($price);
?>

結果は次のようになります。

string(5) "1,000"

見た目は数値のようですが、PHP上では "1,000" という文字列です。

そのため、number_format() は基本的に計算用ではなく表示用として使います。

計算後に表示用として使う

正しい使い方は、計算が終わった後に number_format() で整形する方法です。

<?php
$price = 1000;
$quantity = 3;

$total = $price * $quantity;

echo number_format($total) . '円';
?>

出力結果です。

3,000円

このように、計算はカンマなしの数値で行い、最後に画面へ表示するときだけ number_format() を使うのが基本です。

計算前にカンマを付けない

次のように、先に number_format() でカンマを付けてから計算するのは避けましょう。

<?php
$price = number_format(1000); // "1,000"
$total = $price * 2;

echo $total;
?>

number_format(1000) の結果は "1,000" という文字列です。

カンマを含む文字列は、純粋な数値として扱いにくくなります。

そのため、計算や比較、データベース保存などに使う値にはカンマを付けない方が安全です。

基本の考え方は次の通りです。

計算用の値:1000
表示用の値:1,000

カンマはあくまで表示を読みやすくするための装飾です。

小数点以下を指定してカンマ区切りにする方法

小数点以下の桁数を指定する

number_format() では、第2引数で小数点以下の桁数を指定できます。

number_format($number, 小数点以下の桁数)

たとえば、小数点以下2桁まで表示したい場合は次のように書きます。

<?php
$num = 1234567.891;

echo number_format($num, 2);
?>

出力結果です。

1,234,567.89

第2引数に 2 を指定しているため、小数点以下2桁で表示されます。

小数点以下は四捨五入される

number_format() は、指定した桁数に合わせて数値を丸めます。

たとえば、次の例を見てください。

<?php
$num = 1234.567;

echo number_format($num, 2);
?>

出力結果です。

1,234.57

1234.567 の小数点以下3桁目が 7 なので、2桁目が繰り上がって 1,234.57 になります。

第2引数を省略した場合は、小数点以下0桁として扱われます。

<?php
$num = 1234.56;

echo number_format($num);
?>

出力結果です。

1,235

ここで注意したいのは、小数点以下が単に非表示になるのではなく、丸められるという点です。

<?php
echo number_format(1234.4); // 1,234
echo number_format(1234.5); // 1,235
echo number_format(1234.9); // 1,235
?>

小数点以下を残したい場合は、第2引数を指定します。

<?php
$num = 1234.56;

echo number_format($num, 2);
?>

出力結果です。

1,234.56

小数点以下を切り捨てたい場合

number_format() は丸め処理を行うため、小数点以下を単純に切り捨てたい場合は、floor() などを組み合わせます。

<?php
$num = 1234.9;

echo number_format(floor($num));
?>

出力結果です。

1,234

小数点以下を切り上げたい場合は ceil() を使います。

<?php
$num = 1234.1;

echo number_format(ceil($num));
?>

出力結果です。

1,235

四捨五入したい場合は、round() を使ってから number_format() することもあります。

<?php
$num = 1234.5;

echo number_format(round($num));
?>

出力結果です。

1,235

金額計算では、切り捨て・切り上げ・四捨五入のどれを使うかが重要です。

税込価格、請求金額、ポイント計算などでは、業務ルールに合わせて明確に処理しましょう。

小数点や区切り文字を変更する方法

第3引数と第4引数で記号を指定する

number_format() では、第3引数と第4引数を使って、小数点の記号や桁区切りの記号を指定できます。

number_format($number, 小数点以下の桁数, 小数点の文字, 3桁区切りの文字)

日本や英語圏でよく見る形式は、次のような表記です。

1,234,567.89

この場合は、次のように書きます。

<?php
$num = 1234567.89;

echo number_format($num, 2, '.', ',');
?>

出力結果です。

1,234,567.89

第3引数の '.' は小数点の文字、第4引数の ',' は3桁区切りの文字です。

<?php
echo number_format(
    1234567.89, // 整形したい数値
    2,          // 小数点以下2桁
    '.',        // 小数点の文字
    ','         // 3桁区切りの文字
);
?>

ヨーロッパ式の表記にする例

ヨーロッパの一部では、次のような表記が使われることがあります。

1.234.567,89

この場合は、次のように書きます。

<?php
$num = 1234567.89;

echo number_format($num, 2, ',', '.');
?>

出力結果です。

1.234.567,89

小数点に ,、3桁区切りに . を使うことで、地域に合わせた数値表記にできます。

number_format()の書き方まとめ

よく使う指定方法

よく使う書き方をまとめると、次のようになります。

書き方意味出力例
number_format(1234567)3桁カンマ区切り1,234,567
number_format(1234567.89, 2)小数点以下2桁1,234,567.89
number_format(1234567.89, 0)小数点以下0桁に丸める1,234,568
number_format(1234567.89, 2, '.', ',')小数点.、区切り,1,234,567.89
number_format(1234567.89, 2, ',', '.')小数点,、区切り.1.234.567,89

特に注意したいのは、number_format(1234567.89, 0) の結果です。

小数点以下を単に削除するのではなく、四捨五入されて 1,234,568 になります。

文字列の数値をカンマ区切りにする場合

数値として解釈できる文字列には使える

number_format() には、数値として解釈できる文字列を渡すこともできます。

<?php
$num = "1234567";

echo number_format($num);
?>

出力結果です。

1,234,567

"1234567" は数値として解釈できる文字列なので、number_format() で整形できます。

単位付きの文字列は避ける

ただし、次のような文字列は避けましょう。

<?php
$num = "1234567円";

echo number_format($num);
?>

"1234567円" には単位の「円」が含まれています。

このような値は、純粋な数値として扱うべきではありません。

単位は数値とは分けて扱うのが基本です。

<?php
$num = 1234567;

echo number_format($num) . '円';
?>

数値部分と単位を分けることで、計算やバリデーションもしやすくなります。

カンマ付き文字列にも注意する

次のようにすでにカンマが含まれている文字列にも注意が必要です。

<?php
$num = "1,234,567";
?>

このような値は、表示用の文字列です。

計算や再整形に使う場合は、カンマを取り除いてから数値として扱います。

カンマ付き文字列を数値に戻す方法

str_replace()でカンマを取り除く

フォーム入力や外部データなどで、すでにカンマが入った値を受け取ることがあります。

$price = "1,234,567";

この値を計算に使いたい場合は、まずカンマを取り除きます。

<?php
$price = "1,234,567";

$price = str_replace(',', '', $price);

echo $price * 2;
?>

出力結果です。

2469134

計算結果を再びカンマ区切りで表示したい場合は、最後に number_format() を使います。

<?php
$price = "1,234,567";

$price = str_replace(',', '', $price);
$total = $price * 2;

echo number_format($total) . '円';
?>

出力結果です。

2,469,134円

入力・計算・保存はカンマなしにする

ポイントは、入力・計算・保存はカンマなし、表示だけカンマありにすることです。

入力値:1234567
計算値:1234567
保存値:1234567
表示値:1,234,567

カンマ付きの値は、人間にとっては読みやすいですが、プログラムやデータベースにとっては扱いにくい場合があります。

そのため、カンマはあくまで表示時に付けるものとして考えましょう。

フォーム入力値をカンマ区切りで表示する方法

数値かどうかを確認してから表示する

フォームから金額が送られてくる場合は、入力値が数値かどうかを確認してから number_format() を使います。

<?php
$price = $_POST['price'] ?? '';

if (is_numeric($price)) {
    echo number_format((float)$price) . '円';
} else {
    echo '数値を入力してください';
}
?>

is_numeric() は、値が数値または数値として扱える文字列かどうかを判定する関数です。

カンマ付き入力を許可する場合

ユーザーが次のようにカンマ付きで入力する可能性がある場合は注意が必要です。

1,000

"1,000" はカンマを含むため、そのままだと数値として扱えないことがあります。

カンマ付き入力を許可するなら、先にカンマを取り除いてから判定します。

<?php
$price = $_POST['price'] ?? '';

$price = str_replace(',', '', $price);

if (is_numeric($price)) {
    echo number_format((float)$price) . '円';
} else {
    echo '数値を入力してください';
}
?>

これで、次のような入力にも対応しやすくなります。

1000
1,000
1234567
1,234,567

ただし、実際のフォーム処理では、空欄チェック、不正な文字の除外、上限・下限のチェックなども必要です。

複数の数値をカンマ区切りにする方法

配列の数値をまとめて表示する

複数の金額や数値をまとめて表示する場合は、foreach を使います。

<?php
$prices = [1000, 25000, 398000];

foreach ($prices as $price) {
    echo number_format($price) . '円<br>';
}
?>

出力結果です。

1,000円<br>
25,000円<br>
398,000円<br>

商品一覧や料金表などでよく使う書き方です。

合計金額をカンマ区切りで表示する

ECサイトや見積もり機能では、合計金額を計算して表示することがあります。

<?php
$items = [
    ['name' => '商品A', 'price' => 1200, 'quantity' => 2],
    ['name' => '商品B', 'price' => 3500, 'quantity' => 1],
    ['name' => '商品C', 'price' => 980,  'quantity' => 3],
];

$total = 0;

foreach ($items as $item) {
    $subtotal = $item['price'] * $item['quantity'];
    $total += $subtotal;

    echo $item['name'] . ':' . number_format($subtotal) . '円<br>';
}

echo '合計:' . number_format($total) . '円';
?>

出力イメージです。

商品A:2,400円<br>
商品B:3,500円<br>
商品C:2,940円<br>
合計:8,840円

この例でも、計算自体はカンマなしの数値で行い、表示するときだけ number_format() を使っています。

消費税計算とカンマ区切りを組み合わせる方法

税込価格をカンマ区切りで表示する

消費税を計算して表示する場合も、number_format() を使えます。

<?php
$price = 1980;
$tax_rate = 1.10;

$tax_included_price = $price * $tax_rate;

echo number_format($tax_included_price) . '円';
?>

出力結果です。

2,178円

端数処理を明確にする

金額計算では端数処理に注意が必要です。

切り捨てにする場合は floor() を使います。

<?php
$price = 1980;
$tax_rate = 1.10;

$tax_included_price = floor($price * $tax_rate);

echo number_format($tax_included_price) . '円';
?>

切り上げにする場合は ceil() を使います。

<?php
$price = 1980;
$tax_rate = 1.10;

$tax_included_price = ceil($price * $tax_rate);

echo number_format($tax_included_price) . '円';
?>

四捨五入にする場合は round() を使います。

<?php
$price = 1980;
$tax_rate = 1.10;

$tax_included_price = round($price * $tax_rate);

echo number_format($tax_included_price) . '円';
?>

number_format() 自体にも丸め処理はありますが、税計算などでは「どのタイミングで、どの方法で端数処理するか」が重要です。

そのため、業務ルールに合わせて floor()ceil()round() を明示的に使うと分かりやすくなります。

WordPressで数値をカンマ区切りにする方法

カスタムフィールドの値を表示する場合

WordPressでもPHPを使っているため、number_format() はそのまま使えます。

たとえば、カスタムフィールドに価格を登録している場合は、次のように表示できます。

<?php
$price = get_post_meta(get_the_ID(), 'price', true);

if ($price !== '') {
    echo esc_html(number_format((int)$price) . '円');
}
?>

ACFの値をカンマ区切りにする場合

ACFを使っている場合は、次のようなイメージです。

<?php
$price = get_field('price');

if ($price !== null && $price !== '') {
    echo esc_html(number_format((int)$price) . '円');
}
?>

ここで注意したいのは、次のように書くと 0円 が表示されない可能性があることです。

<?php
if ($price) {
    echo number_format((int)$price) . '円';
}
?>

PHPでは 0"0" が false として扱われるため、価格が 0 の場合に条件を通らないことがあります。

そのため、0円 を表示する可能性がある場合は、次のように空文字や null だけを除外する書き方が適しています。

<?php
if ($price !== null && $price !== '') {
    echo esc_html(number_format((int)$price) . '円');
}
?>

整数と小数でキャストを使い分ける

小数点以下を扱うカスタムフィールドの場合は、(int) ではなく (float) を使います。

<?php
$price = get_field('price');

if ($price !== null && $price !== '') {
    echo esc_html(number_format((float)$price, 2) . '円');
}
?>

整数の金額だけを扱うなら (int)、小数点以下も扱うなら (float) というように使い分けましょう。

出力時にエスケープする

WordPressではesc_html()を使う

number_format() の結果だけであれば、基本的には数字・カンマ・小数点などで構成されます。

そのため危険性は高くありません。

ただし、WordPressやフォーム入力、カスタムフィールドの値を扱う場合は、出力時にエスケープする習慣を付けておくと安全です。

WordPressなら esc_html() を使います。

<?php
$price = 1234567;

echo esc_html(number_format($price) . '円');
?>

通常のPHPではhtmlspecialchars()を使う

通常のPHPでは htmlspecialchars() を使います。

<?php
$price = 1234567;

echo htmlspecialchars(number_format($price) . '円', ENT_QUOTES, 'UTF-8');
?>

特に、単位やラベルにユーザー入力や管理画面入力が混ざる場合は、エスケープを忘れないようにしましょう。

実務向けの関数を作る方法

金額表示用の関数を作る

同じような金額表示を何度も書く場合は、関数にしておくと便利です。

<?php
function format_price($price): string
{
    if ($price === null || $price === '') {
        return '';
    }

    $price = str_replace(',', '', (string)$price);

    if (!is_numeric($price)) {
        return '';
    }

    return number_format((float)$price) . '円';
}
?>

使用例です。

<?php
echo format_price(1234567);
echo format_price('1234567');
echo format_price('1,234,567');
?>

出力結果です。

1,234,567円
1,234,567円
1,234,567円

この関数では、次のような処理をしています。

1. nullや空文字なら空文字を返す
2. カンマが含まれていたら取り除く
3. 数値として扱えるか確認する
4. number_format()で整形する
5. 最後に円を付ける

金額表示を複数箇所で使う場合は、このように関数化しておくとコードが読みやすくなります。

小数点以下にも対応した汎用関数を作る

金額だけでなく、平均値、割合、重量、距離などにも使いたい場合は、小数点以下の桁数を指定できる関数にしておくと便利です。

<?php
function format_number($number, int $decimals = 0): string
{
    if ($number === null || $number === '') {
        return '';
    }

    $number = str_replace(',', '', (string)$number);

    if (!is_numeric($number)) {
        return '';
    }

    return number_format((float)$number, $decimals);
}
?>

使用例です。

<?php
echo format_number(1234567);
echo format_number(1234567.891, 2);
echo format_number('1,234,567.891', 2);
?>

出力結果です。

1,234,567
1,234,567.89
1,234,567.89

小数点以下の桁数を変えたい場合は、第2引数を変更します。

<?php
echo format_number(1234.567, 1); // 1,234.6
echo format_number(1234.567, 2); // 1,234.57
echo format_number(1234.567, 3); // 1,234.567
?>

データベースに保存するときの注意点

カンマ付きではなく数値として保存する

金額や数値をデータベースに保存する場合は、カンマ付きではなく、カンマなしの数値として保存するのが基本です。

避けたい例です。

1,000

望ましい例です。

1000

カンマ付きで保存してしまうと、次のような処理が面倒になります。

合計金額の計算
数値の大小比較
並び替え
検索
集計
税計算
CSV出力時の整形

たとえば、価格順に並び替える場合、値が文字列として保存されていると正しく並ばない可能性があります。

表示する直前にカンマ区切りにする

基本的には、データベースには次のように保存します。

保存する値:1000
表示する値:1,000

カンマ区切りは、画面に表示する直前に number_format() で行いましょう。

<?php
echo number_format($price) . '円';
?>

JavaScriptでカンマ区切りにする場合との違い

PHPではnumber_format()を使う

PHPの number_format() は、サーバー側で数値を整形する方法です。

PHPでHTMLを生成する段階で金額や数値を表示する場合は、number_format() を使うのが自然です。

<?php
echo number_format(1234567);
?>

出力結果です。

1,234,567

JavaScriptではtoLocaleString()を使う

一方、ブラウザ上で動的に数値を変更する場合は、JavaScriptでカンマ区切りにすることもあります。

JavaScriptでは、たとえば次のように書けます。

const price = 1234567;

console.log(price.toLocaleString());

出力結果です。

1,234,567

PHPとJavaScriptの使い分け

使い分けとしては、次のように考えると分かりやすいです。

処理使う方法
PHPでHTMLを生成するときに整形するnumber_format()
ブラウザ上で動的に数値を変更するJavaScriptの toLocaleString()
データベースに保存するカンマなしの数値
画面に表示するカンマ付き文字列

PHP側で表示が完成するなら number_format()、ユーザー操作によって画面上の金額が変わるなら JavaScript を使う、という使い分けになります。

PHPのカンマ区切りでよくあるミス

ミス1:計算前にカンマを付けてしまう

<?php
$price = number_format(1000);
$total = $price * 2;

echo $total;
?>

number_format() の戻り値は文字列です。

計算には、カンマなしの数値を使いましょう。

正しい例です。

<?php
$price = 1000;
$total = $price * 2;

echo number_format($total) . '円';
?>

ミス2:小数点以下が単に消えると思ってしまう

<?php
$num = 1234.56;

echo number_format($num);
?>

出力結果です。

1,235

小数点以下は単に削除されるのではなく、丸められます。

小数点以下を表示したい場合は、第2引数を指定します。

<?php
echo number_format($num, 2);
?>

出力結果です。

1,234.56

ミス3:カンマ付きの文字列をそのまま使う

<?php
$price = "1,000";

echo number_format($price);
?>

カンマ付きの "1,000" は、すでに表示用に整形された文字列です。

再度数値として扱う場合は、カンマを取り除いてから処理しましょう。

<?php
$price = "1,000";
$price = str_replace(',', '', $price);

echo number_format((float)$price);
?>

ミス4:0円が表示されない条件分岐を書く

<?php
if ($price) {
    echo number_format($price) . '円';
}
?>

$price0 の場合、この条件は false になります。

0円 も表示したい場合は、次のように書きます。

<?php
if ($price !== null && $price !== '') {
    echo number_format((int)$price) . '円';
}
?>

ミス5:データベースにカンマ付きで保存する

1,000

このように保存すると、計算や並び替えで扱いにくくなります。

データベースには次のように保存しましょう。

1000

そして、表示するときにだけ次のように整形します。

<?php
echo number_format($price) . '円';
?>

PHPで3桁カンマ区切りにする方法のまとめ

基本はnumber_format()を使う

PHPで数値を3桁ごとにカンマ区切りにするには、number_format() を使います。

基本形は次の通りです。

<?php
echo number_format(1234567);
?>

出力結果です。

1,234,567

金額を表示する場合は、次のように使えます。

<?php
echo number_format($price) . '円';
?>

小数点以下や区切り文字も指定できる

小数点以下を表示したい場合は、第2引数を指定します。

<?php
echo number_format($num, 2);
?>

小数点の記号や3桁区切りの記号を指定したい場合は、第3引数・第4引数を使います。

<?php
echo number_format($num, 2, '.', ',');
?>

計算・保存はカンマなし、表示だけカンマありにする

実務で特に大切なのは、次の考え方です。

計算・保存:カンマなしの数値
表示:number_format()でカンマ付きにする

number_format() の戻り値は文字列なので、計算前ではなく、画面に表示する直前に使うのが基本です。

また、小数点以下は単に削除されるのではなく、指定桁数に応じて丸められます。

金額や税計算で端数処理が必要な場合は、floor()ceil()round() などを組み合わせて、処理ルールを明確にしておきましょう。

以上、PHPの3桁のカンマ区切りについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次