money_format
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
money_format — 数値を金額文字列にフォーマットする
警告 この関数は PHP 7.4.0 で 非推奨になります。この関数に頼らないことを強く推奨します。
説明
money_format
( string $format
, float $number
) : string
money_format() は、number
をフォーマットして返します。この関数は C のライブラリ関数
strfmon() をラップしたものですが、一度に
変換できる数値がひとつだけであるという点が異なります。
パラメータ
format
フォーマット指定の書式は以下の順になります。
%
文字フラグ(オプション)
フィールドの幅(オプション)
左精度(オプション)
右精度(オプション)
変換文字(必須)
フラグ
以下のフラグのうちひとつあるいは複数が使用可能です。
=
f文字
=
の後に続く(シングルバイトの)文字 f が、数値埋め文字として使用されます。 デフォルトはスペース文字です。^
グループ化文字(現在のロケールで定義されている)を使用しないようにします。
+
あるいは(
正の数、負の数の書式を指定します。
+
が使用された場合、+
および-
に該当する そのロケールの符号マークが使用されます。(
が使用された場合、負の数は括弧で囲まれます。何も指定しなかった場合、 デフォルトは+
です。!
出力文字列から通貨記号を除きます。
-
指定した場合、すべてのフィールドを左詰め(右側に数値埋め文字が追加される) にします。デフォルトはこれと反対で、すべてのフィールドを右詰め (左側に数値埋め文字が追加される)にします。
フィールドの幅
- w
10 進の数値形式の文字列で、フィールドの幅の最小値を指定します。フラグ
-
が使用されていない限り、フィールドは 右詰めとなります。デフォルト値は 0(ゼロ) です。
左精度
#
n10 進の基準文字(例: 小数点)より左側の最大の桁数 (n) を指定します。これは通常、 n より少ない桁数の数値に対して 数値埋め文字を使用することで、出力の桁位置をそろえるために 使用されます。実際の桁数が n より 大きい場合、この設定は無視されます。
^
フラグでグループ化文字が抑止されていない場合、 (もし存在するなら)数値埋め文字が追加される前にグループ化文字が 挿入されます。グループ化文字は数値埋め文字には適用されません。 たとえ数値埋め文字が数字であったとしても同様です。位置あわせを確実にするため、出力中の数値の前後に表れる文字(たとえば 通貨記号や符号など)は、必要に応じて(正の数と負の数の長さをそろえるなど の理由で)スペース文字が付加されることがあります。
右精度
.
pピリオドに続く数値(p) で、10 進の基準文字以降の桁数を指定します。 p の値が 0(ゼロ)であった場合、基準文字と それ以降の数値は省略されます。右精度が指定されていない場合、 使用中の現在のロケールからデフォルト値を検出します。 フォーマットされる数値は、フォーマット前にこの桁数に丸められます。
変換文字
i
ロケールの国際通貨フォーマット(例: USA ロケールでは USD 1,234.56)によってフォーマットします。
n
ロケールの国内通貨フォーマット(例: de_DE ロケールでは EU1.234,56) によってフォーマットします。
%
%
文字を返します。
number
フォーマットする数値。
返り値
フォーマットした文字列を返します。
フォーマット文字列の前後の文字は、そのまま返されます。
number
が非数値の場合は null
を返し、
E_WARNING
を発行します。
注意
注意:
システムで strfmon が使用可能な場合のみ money_format() 関数が定義されます。例えば、Windows では strfmon は使用できません。 そのため money_format() は Windows では 定義されていません。
注意:
ロケール設定のうち、
LC_MONETARY
カテゴリの内容が この関数の振る舞いに影響します。この関数を使用する前に、 setlocale() で適切なデフォルトロケールを 設定してください。
例
例1 money_format() の例
この関数の使用法を詳しく説明するために、 さまざまなロケールおよびフォーマット指定を使用します。
<?php$number = 1234.56;// en_US ロケールの国際フォーマットで表示しますsetlocale(LC_MONETARY, 'en_US');echo money_format('%i', $number) . "\n";// USD 1,234.56// イタリアの国内フォーマットで小数点以下 2 桁で表示しますsetlocale(LC_MONETARY, 'it_IT');echo money_format('%.2n', $number) . "\n";// Eu 1.234,56// 負の数を使用します$number = -1234.5672;// US の国際フォーマットで、負の数には () を使用して// 左精度を 10 桁にしますsetlocale(LC_MONETARY, 'en_US');echo money_format('%(#10n', $number) . "\n";// ($ 1,234.57)// 上と同じですが、それに加えて右精度を 2 桁// 数値埋め文字として '*' を使用しますecho money_format('%=*(#10.2n', $number) . "\n";// ($********1,234.57)// 左詰め、幅 14 桁、左精度 8 桁、右精度 2 桁、グループ化文字なしで// de_DE ロケールの国際フォーマットを使用します。setlocale(LC_MONETARY, 'de_DE');echo money_format('%=*^-14#8.2i', 1234.56) . "\n";// Eu 1234,56****// 変換指定の前後に宣伝文句を追加しますsetlocale(LC_MONETARY, 'en_GB');$fmt = 'The final value is %i (after a 10%% discount)';echo money_format($fmt, 1234.56) . "\n";// The final value is GBP 1,234.56 (after a 10% discount)?>
参考
- setlocale() - ロケール情報を設定する
- sscanf() - フォーマット文字列に基づき入力を処理する
- sprintf() - フォーマットされた文字列を返す
- printf() - フォーマット済みの文字列を出力する
- number_format() - 数字を千位毎にグループ化してフォーマットする