【PHP8.x】number_format関数の使い方

number_format関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

number_format関数は、与えられた数値を人間が読みやすい形式に整形する関数です。主に、金額表示や統計データなど、数値を視覚的に分かりやすく表示する際に利用されます。この関数を使用することで、例えば「1234567.89」という数値を「1,234,567.89」のように、桁区切りや小数点以下の桁数を調整して出力することが可能になります。

この関数は、最初の引数として整形したい数値を指定します。省略可能な第二引数には、小数点以下の桁数を指定でき、例えば2を指定すれば常に小数点以下2桁で表示されます。また、第三引数と第四引数を使うことで、小数点の区切り文字と桁区切りの文字をそれぞれ自由に設定することができます。デフォルトでは、小数点はピリオド(.)、桁区切りはカンマ(,)ですが、ヨーロッパの表記法のように小数点をカンマ(,)、桁区切りをピリオド(.)に設定することも可能です。

number_format関数は、整形された結果を文字列として返します。そのため、返された値を数値として再度計算に利用する際には、明示的な型変換が必要となる点にご注意ください。この関数は、ユーザーインターフェースでの数値表示を改善するために広く活用されています。

構文(syntax)

1<?php
2number_format(float $num, int $decimals = 0, string $decimal_separator = ".", string $thousands_separator = ",");
3?>

引数(parameters)

float $num, int $decimals = 0, string $decimal_separator = ".", string $thousands_separator = ","

  • float $num: 数値としてフォーマットしたい数値
  • int $decimals = 0: 小数点以下の桁数を指定する整数(デフォルトは0)
  • string $decimal_separator = ".": 小数点に使用する文字列(デフォルトは".")
  • string $thousands_separator = ",": 千単位の区切り文字に使用する文字列(デフォルトは",")

戻り値(return)

string

指定された数値フォーマットで整形された文字列を返します。

サンプルコード

PHP number_format で 0 を非表示にする

1<?php
2
3/**
4 * 数値をフォーマットし、値が厳密に0の場合は空文字列を返します。
5 * それ以外の数値はnumber_format関数を使用して指定された形式でフォーマットします。
6 *
7 * @param float $num フォーマットする数値。
8 * @param int $decimals 小数点以下の桁数。デフォルトは0。
9 * @param string $decimal_separator 小数点の区切り文字。デフォルトは'.'。
10 * @param string $thousands_separator 千の位の区切り文字。デフォルトは','。
11 * @return string フォーマットされた数値の文字列、または数値が0の場合は空文字列。
12 */
13function formatNumberWithoutZero(
14    float $num,
15    int $decimals = 0,
16    string $decimal_separator = ".",
17    string $thousands_separator = ","
18): string {
19    // 数値が厳密に0の場合、空文字列を返して「0を表示しない」要件に対応します。
20    // 浮動小数点数の比較には注意が必要ですが、ここでは0.0と一致する場合を想定しています。
21    if ($num == 0.0) {
22        return '';
23    }
24
25    // 0以外の数値はnumber_format関数でフォーマットします。
26    return number_format($num, $decimals, $decimal_separator, $thousands_separator);
27}
28
29// --- 使用例 ---
30
31// 0の場合: 空文字列が返されます
32// var_dump(formatNumberWithoutZero(0)); // ''
33
34// 0.00の場合 (小数部指定あり): 空文字列が返されます
35// var_dump(formatNumberWithoutZero(0.00, 2)); // ''
36
37// 正の数の場合: 通常通りフォーマットされます
38// var_dump(formatNumberWithoutZero(12345.678)); // '12,346'
39
40// 負の数の場合: 通常通りフォーマットされます
41// var_dump(formatNumberWithoutZero(-9876.543, 2)); // '-9,876.54'
42
43// 小数部指定あり:
44// var_dump(formatNumberWithoutZero(5000.123, 2)); // '5,000.12'
45
46// 区切り文字を変更した場合:
47// var_dump(formatNumberWithoutZero(1234567.89, 2, ',', ' ')); // '1 234 567,89'
48
49?>

このサンプルコードは、PHPで数値を読みやすい形式に整形する際に、特に「数値が0の場合には何も表示しない」という要件に対応するためのものです。PHP標準のnumber_format関数は、数値を指定された小数点以下の桁数や桁区切り文字を使って文字列に変換しますが、0も通常通り「0」や「0.00」のようにフォーマットしてしまいます。

そこで、提供されているformatNumberWithoutZero関数は、このnumber_format関数を内部で利用しつつ、特定の要件を満たすように拡張しています。この関数は、まず引数として渡された数値$numが厳密に0.0であるかを判定します。もし数値が0であれば、直接空文字列''を戻り値として返します。これにより、画面には何も表示されず、「0を表示しない」という目的が達成されます。

数値が0以外のケースでは、number_format関数に処理を委ねます。この関数は、$num(フォーマットする数値)、$decimals(小数点以下の桁数)、$decimal_separator(小数点の区切り文字)、$thousands_separator(千の位の区切り文字)の引数に基づいて数値を文字列として整形し、その結果を返します。例えば、12345.678'12,346'になったり、0が空文字列になったりする挙動を示します。この仕組みで、0の時だけ表示を制御し、他の数値は適切に整形することができます。

この関数は、数値が厳密に0.0の場合に空文字列を返しますが、浮動小数点数の比較特性により、わずかな誤差を持つ値は0として扱われませんので注意が必要です。元のnumber_format関数は、指定された小数点以下の桁数で数値を丸めるため、元の数値と異なる表示になることがあります。例えば、123.456を小数点以下2桁で指定すると123.46と表示されます。また、戻り値は常に文字列型となるため、再度数値として計算に利用する場合は型変換が必要となる点も理解しておきましょう。千の位と小数点の区切り文字を適切に指定することで、柔軟な数値表示に対応できます。

関連コンテンツ