PHP Tips | 文字列処理:フォーマット – 金額フォーマット(カンマ)

PHP PHP
スポンサーリンク

「金額フォーマット(カンマ)」でやりたいことをイメージする

まず、やりたいことはとてもシンプルです。

"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, '.', ',');
}
PHP
echo 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

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