💡 今日の3行まとめ
  • 数値を3桁カンマ区切り(13,200など)に整形するときは number_format($数値) を使う
  • number_format() の戻り値は「文字列(string)」になるため、足し算や税計算は必ず整形前に済ませる
  • 小数点以下の桁数を指定したい場合は第2引数に桁数(例:number_format($数値, 1))を渡す

1. 今日のお題とゴール

商品の税抜価格リストから「10%の税込価格」と「合計金額」を計算し、見やすい3桁カンマ区切りで画面に出力する処理を作ります。

  • 各商品の税抜価格から税込価格(int)を計算し、合計金額を求める
  • すべての計算が終わったあと、出力直前に number_format() でカンマ区切りにする
  • 商品名・税込価格・合計金額を「¥13,200」の形式で整形して表示する
// 期待する出力例
ワイヤレスイヤホン: ¥13,200(税込)
モバイルバッテリー: ¥4,950(税込)
合計金額: ¥18,150(税込)

2. ❌ やりがちなNGコード vs ⭕ コピペで動く正解コード

❌ やりがちなNGコードBefore
<?php
$item1 = number_format(13200); // 先にカンマ区切り("13,200")にしてしまう
$item2 = number_format(4950);  // "4,950"

// ❌ カンマ入りの文字列同士は足し算できず、PHP 8では TypeError で停止する!
$total = $item1 + $item2;
echo "合計金額: ¥{$total}\n";

number_format() を通した結果は数値ではなく「カンマを含む文字列("13,200")」に変わります。計算の途中でフォーマットしてしまうと、後から合計や送料を足そうとしたときに PHP 8 以降では TypeError が発生してプログラムが止まってしまいます。

⭕ コピペで動く正解コード(PHP 8.3+)After
<?php
declare(strict_types=1);

$items = [
    ['name' => 'ワイヤレスイヤホン', 'price' => 12000],
    ['name' => 'モバイルバッテリー', 'price' => 4500],
];

$taxRate = 10; // 消費税率(10%)
$totalTaxIncluded = 0;

foreach ($items as $item) {
    // 1. 計算はすべて「数値(int)」のまま行う
    $taxIncluded = intdiv($item['price'] * (100 + $taxRate), 100);
    $totalTaxIncluded += $taxIncluded;

    // 2. 画面に表示する直前にだけ number_format() でカンマ区切りにする
    $formattedPrice = number_format($taxIncluded);
    echo "{$item['name']}: ¥{$formattedPrice}(税込)\n";
}

// 3. 合計金額も最後に1回だけフォーマットして出力する
$formattedTotal = number_format($totalTaxIncluded);
echo "合計金額: ¥{$formattedTotal}(税込)\n";

3. ここだけ押さえる!3つのポイント

1鉄則は「計算は数値のまま、表示の直前にフォーマット」

number_format() の戻り値は画面表示用の文字列(string)になるため、それ以降の四則演算には使えません。税込計算や合計の足し算はすべて整数(int)のまま終わらせ、echo する直前にだけ変換しましょう。

2何桁の金額でも自動で3桁ごとにカンマが入る

number_format(1200000) のように数値を渡すだけで、"1,200,000" のように千の位・百万の位へ自動でカンマが挿入されます。980 のような3桁以下の数値はカンマなしの "980" としてそのまま安全に返ります。

3小数点以下を表示したいときは第2引数を指定する

デフォルトでは小数点以下は四捨五入されて整数部分のみが表示されます。割引率や平均点などで小数第1位まで残したい場合は、number_format(1234.56, 1) のように第2引数へ桁数を渡すと "1,234.6" と整形できます。

4. 1分ミニチャレンジ

🚀 手を動かしてみよう

正解コード5行目の 'price' => 12000 を、100万円を超える 'price' => 1200000 に書き換えて実行してみましょう。コードを1行も追加することなく、税込価格が ¥1,320,000 とカンマ2つで綺麗に区切られ、合計金額も正しく計算されることが確認できます。