「通貨記号付きの金額フォーマット」でやりたいことをイメージする
まず、ゴールのイメージからいきます。
1000 → "¥1,000"
1234567 → "¥1,234,567"
1234.5 → "¥1,234.50"(ドルなど小数ありの通貨)
1000 → "$1,000.00"
さっきやった「カンマ付き金額フォーマット」に、
「通貨記号(¥, $, € など)」をくっつけたい、という話です。
業務システムだと、ほぼ必ず出てきます。
請求書、見積書、売上レポート、ダッシュボード…
どこでも「数字だけ」より「通貨記号付き」の方が、パッと意味が伝わります。
ここでは、
- 日本円(¥)のパターン
- 外貨($, € など)のパターン
- 通貨記号の位置(前に付けるか、後ろに付けるか)
を、PHP のユーティリティとして整理していきます。
ベースになるのは number_format(カンマ区切り)
まずは「数字をきれいにする」ことが先
通貨記号を付ける前に、
やるべきことは「数字を人間に読みやすくする」ことです。
ここは前回と同じで、number_format がベースになります。
echo number_format(1000); // 1,000
echo number_format(1234567); // 1,234,567
echo number_format(1234.5, 2); // 1,234.50
PHP- 整数+カンマ →
number_format($amount) - 小数2桁+カンマ →
number_format($amount, 2)
この「カンマ付きの文字列」に、通貨記号をくっつける、という構造で考えるとシンプルです。
日本円(¥)の通貨記号付きフォーマット
一番よく使う形:「¥1,234」
日本の業務システムで一番よく見るのは、この形です。
¥1,000
¥123,456
PHP で素直に書くと、こうなります。
function formatYenWithSymbol(int|float|string $amount): string
{
$formatted = number_format((float)$amount);
return '¥' . $formatted;
}
PHP使い方はこうです。
echo formatYenWithSymbol(1000); // ¥1,000
echo formatYenWithSymbol("1234567"); // ¥1,234,567
PHPここでのポイントは二つです。
一つ目は、「数値 → カンマ付き文字列 → 通貨記号を前に付ける」という順番にしていること。
二つ目は、「通貨記号をベタ書きしている」ことです。
日本語システムで日本円だけを扱うなら、
これくらいシンプルで十分です。
「1,234円」のスタイルもよく使う
日本語 UI だと、¥1,234 ではなく 1,234円 と書くことも多いです。
function formatYenWithKanji(int|float|string $amount): string
{
$formatted = number_format((float)$amount);
return $formatted . '円';
}
PHPecho formatYenWithKanji(1000); // 1,000円
echo formatYenWithKanji(1234567); // 1,234,567円
PHP「どちらを使うか」はプロジェクトのデザインポリシー次第ですが、
ユーティリティとしては両方用意しておいてもいいくらいです。
外貨(ドル・ユーロなど)の通貨記号付きフォーマット
通貨記号を前に付けるパターン
ドルやユーロなどは、だいたいこういう形で表示します。
$1,234.50
€9,999.99
PHP でのユーティリティは、こう書けます。
/**
* 通貨記号を前に付けて表示する(小数2桁)
*
* 例: 1234.5, '$' → "$1,234.50"
*/
function formatCurrencyWithSymbol(float|string $amount, string $symbol): string
{
$formatted = number_format((float)$amount, 2, '.', ',');
return $symbol . $formatted;
}
PHP使い方の例です。
echo formatCurrencyWithSymbol(1234.5, '$'); // $1,234.50
echo formatCurrencyWithSymbol(9999.99, '€'); // €9,999.99
PHPここでの重要ポイントは、
- 小数2桁を固定で表示している(
number_format(..., 2, '.', ',')) - 通貨記号は引数で受け取るようにしている
というところです。
通貨記号を引数にしておくと、
「通貨ごとに関数を増やさなくていい」というメリットがあります。
通貨記号を後ろに付けるパターン
一部の表記では、通貨記号を後ろに付けることもあります。
1,234.50 USD
9,999.99 EUR
その場合は、こういうユーティリティにしておくと使い回しやすいです。
/**
* 通貨コードを後ろに付けて表示する(小数2桁)
*
* 例: 1234.5, 'USD' → "1,234.50 USD"
*/
function formatCurrencyWithCode(float|string $amount, string $code): string
{
$formatted = number_format((float)$amount, 2, '.', ',');
return $formatted . ' ' . $code;
}
PHPecho formatCurrencyWithCode(1234.5, 'USD'); // 1,234.50 USD
echo formatCurrencyWithCode(9999.99, 'EUR'); // 9,999.99 EUR
PHP「記号を前に」「コードを後ろに」など、
プロジェクトのルールに合わせて使い分けられるようにしておくと便利です。
入力値が「文字列の金額」のときの注意点
“1,234” をそのままフォーマットすると危険
フォーム入力などで、ユーザーがすでにカンマ付きで入力してくることがあります。
$_POST['amount'] = "1,234";
PHPこれをそのまま number_format に渡すと、こうなります。
echo number_format($_POST['amount']); // 1
PHP"1,234" は「数字+カンマ」なので、
PHP は先頭の "1" だけを数値として解釈してしまいます。
通貨記号付きフォーマットでも同じ罠にはまるので、
必ず「カンマを取り除いてから数値にする」ステップを挟むべきです。
カンマを取り除いてからフォーマットするユーティリティ
/**
* ユーザー入力の金額文字列(カンマ付きかも)を数値に変換する
*/
function parseAmount(string $raw): float
{
$clean = str_replace(',', '', $raw);
return (float)$clean;
}
PHPこれを組み合わせると、例えばこう書けます。
$raw = $_POST['amount'] ?? '0';
$amount = parseAmount($raw);
echo formatYenWithSymbol($amount);
// "¥1,234" など
PHP「入力 → 数値 → フォーマット」という流れを徹底すると、
金額周りのバグがかなり減ります。
実務での使いどころのイメージ
請求書・見積書の金額表示
$subtotal = 100000;
$tax = 10000;
$total = $subtotal + $tax;
echo "小計: " . formatYenWithSymbol($subtotal) . "\n";
echo "消費税: " . formatYenWithSymbol($tax) . "\n";
echo "合計: " . formatYenWithSymbol($total) . "\n";
PHP出力イメージはこうなります。
小計: ¥100,000
消費税: ¥10,000
合計: ¥110,000
テンプレート側では「金額は必ず formatYenWithSymbol() を通す」と決めておくと、
表記が統一されて、読みやすさも一気に上がります。
外貨建てのレポート
$salesUsd = 12345.67;
$salesEur = 9876.54;
echo "Sales (USD): " . formatCurrencyWithSymbol($salesUsd, '$') . "\n";
echo "Sales (EUR): " . formatCurrencyWithSymbol($salesEur, '€') . "\n";
PHPSales (USD): $12,345.67
Sales (EUR): €9,876.54
通貨記号を引数にしておけば、
多通貨対応の画面でも同じ関数を使い回せます。
まとめ:今日からの「通貨記号付き金額フォーマット」ユーティリティ
大事なポイントだけ、ぎゅっとまとめます。
ベースは number_format。
「カンマ付きの数字」を作ってから、
通貨記号や通貨コードを前後にくっつける、という構造にするとシンプルです。
日本円なら:
function formatYenWithSymbol(int|float|string $amount): string
{
return '¥' . number_format((float)$amount);
}
function formatYenWithKanji(int|float|string $amount): string
{
return number_format((float)$amount) . '円';
}
PHP外貨なら:
function formatCurrencyWithSymbol(float|string $amount, string $symbol): string
{
return $symbol . number_format((float)$amount, 2, '.', ',');
}
function formatCurrencyWithCode(float|string $amount, string $code): string
{
return number_format((float)$amount, 2, '.', ',') . ' ' . $code;
}
PHP