「金額フォーマット(カンマ)」でやりたいことをイメージする
まず、やりたいことはとてもシンプルです。
"1000" → "1,000"
"1000000" → "1,000,000"
"0" → "0"
"123456789" → "123,456,789"
人間がパッと見て「いくらか」を理解しやすくするために、
3桁ごとにカンマを入れたい、という話です。
業務システムだと、ほぼ確実に出てきます。
- 売上金額の一覧
- 見積書・請求書の金額表示
- 管理画面の「合計金額」
など、「数字だけ」だと読みにくいところは、全部カンマ付きにしたくなります。
PHP には、これをやるための専用関数が用意されています。
PHP の基本:number_format を覚える
number_format のシンプルな使い方
金額フォーマットでまず覚えるべきは、number_format です。
string number_format(
float $num,
int $decimals = 0,
?string $decimal_separator = ".",
?string $thousands_separator = ","
)
PHP一番シンプルな使い方は、こうです。
echo number_format(1000); // 1,000
echo number_format(1000000); // 1,000,000
echo number_format(123456789); // 123,456,789
PHPデフォルトでは、
- 小数点以下は表示しない(
$decimals = 0) - 小数点は
. - 3桁区切りの区切り文字は
,
という設定になっています。
「日本語の金額表示(整数+カンマ)」なら、number_format($amount) だけでほぼ済みます。
文字列でも使えるの?
number_format の引数は float ですが、
PHP は「数字っぽい文字列」を自動で数値に変換してくれます。
echo number_format("1000"); // 1,000
echo number_format("1234567"); // 1,234,567
PHPただし、「数字以外が混ざっている」場合は挙動が怪しくなるので、
基本的には「数値として扱える状態」にしてから渡すのが安全です。
小数を含む金額をフォーマットする
小数点以下も表示したい場合
例えば、1234.5 を「1,234.50」のように表示したい場合は、
第2引数に「小数点以下の桁数」を指定します。
echo number_format(1234.5, 2); // 1,234.50
echo number_format(1234, 2); // 1,234.00
echo number_format(1234.567, 2); // 1,234.57(四捨五入される)
PHPここでのポイントは、
- 小数点以下は「四捨五入」される
- 整数でも、小数点以下の桁数ぶん「0」が付く
ということです。
日本円のように「小数なし」で扱う通貨なら、number_format($amount) で十分ですが、
ドルやポイントなど「小数2桁」を扱う場合は、number_format($amount, 2) のように指定します。
金額フォーマット用のユーティリティ関数を作る
日本円(整数+カンマ)専用のラッパー
毎回 number_format を直接書いてもいいのですが、
「これは金額だよ」という意味をはっきりさせるために、
ラッパー関数にしておくと読みやすくなります。
/**
* 日本円の金額をカンマ付きでフォーマットする
*
* 例: 1000 → "1,000"
*/
function formatYen(int|float|string $amount): string
{
return number_format((float)$amount);
}
PHP使い方はこうです。
echo formatYen(1000); // 1,000
echo formatYen("1234567"); // 1,234,567
PHP「金額として表示している」という意図が、
コードを読んだときにすぐ伝わるのがメリットです。
小数2桁の通貨用ラッパー
/**
* 小数2桁の通貨をカンマ付きでフォーマットする
*
* 例: 1234.5 → "1,234.50"
*/
function formatCurrency(float|string $amount): string
{
return number_format((float)$amount, 2, '.', ',');
}
PHPecho formatCurrency(1234.5); // 1,234.50
echo formatCurrency("98765.432"); // 98,765.43
PHP第3引数・第4引数で「小数点の記号」「3桁区切りの記号」を変えられるので、
ロケールに合わせた表示もできますが、
日本語システムなら '.' と ',' のままで十分なことが多いです。
「文字列としての金額」をどう扱うか
フォーム入力はだいたい「文字列」で来る
ユーザーがフォームに入力した金額は、$_POST['amount'] のように「文字列」として届きます。
例えば、こんな感じです。
$_POST['amount'] = "1,234";
PHPこのまま number_format に渡すとどうなるか。
echo number_format($_POST['amount']); // 1
PHP"1,234" は「数字+カンマ」なので、
PHP が先頭の "1" だけを数値として解釈してしまい、
結果として「1」になってしまいます。
ここが初心者が一番ハマりやすいポイントです。
入力値からカンマを取り除いてから数値にする
フォーム入力を数値として扱いたいときは、
まずカンマを取り除いてからキャストするのが定番です。
$raw = $_POST['amount'] ?? '';
$clean = str_replace(',', '', $raw);
$amount = (int)$clean; // または (float)$clean
PHPこれで、
"1,234" → "1234" → 1234
PHPという流れになります。
保存するときは「数値(または数字だけの文字列)」にしておき、
表示するときに formatYen() などでカンマ付きにする、
という設計にしておくと、後々とても楽になります。
実務での使いどころのイメージ
一覧画面での金額表示
$row = [
'price' => 1234567,
];
echo formatYen($row['price']) . " 円";
// 1,234,567 円
PHPテンプレート側では「金額は必ず formatYen() を通す」と決めておくと、
どの画面でも表記が統一されます。
合計金額の計算と表示
$items = [
['price' => 1000],
['price' => 2500],
['price' => 300],
];
$total = 0;
foreach ($items as $item) {
$total += $item['price'];
}
echo "合計: " . formatYen($total) . " 円";
// 合計: 3,800 円
PHP計算は「数値」で行い、
最後に表示するときだけフォーマットする、という流れです。
まとめ:今日からの「金額フォーマット(カンマ)」ユーティリティ
押さえておきたいポイントをコンパクトにまとめると、こうなります。
金額のカンマ区切りは、number_format 一択でいい。
日本円(整数)なら number_format($amount)、
小数2桁なら number_format($amount, 2)。
フォーム入力のような「文字列の金額」は、
カンマを取り除いてから数値に変換し、
保存は数値(または数字だけの文字列)、
表示のときだけ formatYen() などでカンマ付きにする。
核になるコードは、このくらいで十分です。
function formatYen(int|float|string $amount): string
{
return number_format((float)$amount);
}
function formatCurrency(float|string $amount): string
{
return number_format((float)$amount, 2, '.', ',');
}
PHP