関数・クラス解説

money_format

version:PHP 4 >= 4.3.0, PHP 5, PHP 7 (公式)

数値をロケールに合わせた金額フォーマットへ変換する

注意

この関数は PHP 7.4.0 で非推奨になりました。
代わりにNumberFormatter::formatCurrency()を利用してください。

フォーマット

string : money_format ( string $format , float $number )

パラメータ

string $format (必須)
フォーマット指定の書式は以下の順になります。

  • % 文字
  • フラグ(オプション)
  • フィールドの幅(オプション)
  • 左精度(オプション)
  • 右精度(オプション)
  • 変換文字(必須)

フォーマットについては以下を参照してください


フラグ
以下のフラグのうちひとつあるいは複数が使用可能です。

=f
 文字 = の後に続く(シングルバイトの)文字 f が、数値埋め文字として使用されます。 デフォルトはスペース文字です。
^
 グループ化文字(現在のロケールで定義されている)を使用しないようにします。
+ あるいは (
 正の数、負の数の書式を指定します。+ が使用された場合、 + および - に該当する そのロケールの符号マークが使用されます。( が使用された場合、負の数は括弧で囲まれます。何も指定しなかった場合、 デフォルトは + です。
!
 出力文字列から通貨記号を除きます。
-
 指定した場合、すべてのフィールドを左詰め(右側に数値埋め文字が追加される) にします。デフォルトはこれと反対で、すべてのフィールドを右詰め (左側に数値埋め文字が追加される)にします。

フィールドの幅
w
 10 進の数値形式の文字列で、フィールドの幅の最小値を指定します。フラグ - が使用されていない限り、フィールドは 右詰めとなります。デフォルト値は 0(ゼロ) です。

左精度
#n
 10 進の基準文字(例: 小数点)より左側の最大の桁数 (n) を指定します。これは通常、 n より少ない桁数の数値に対して 数値埋め文字を使用することで、出力の桁位置をそろえるために 使用されます。実際の桁数が n より 大きい場合、この設定は無視されます。 ^ フラグでグループ化文字が抑止されていない場合、 (もし存在するなら)数値埋め文字が追加される前にグループ化文字が 挿入されます。グループ化文字は数値埋め文字には適用されません。 たとえ数値埋め文字が数字であったとしても同様です。 位置あわせを確実にするため、出力中の数値の前後に表れる文字(たとえば 通貨記号や符号など)は、必要に応じて(正の数と負の数の長さをそろえるなど の理由で)スペース文字が付加されることがあります。

右精度
.p
 ピリオドに続く数値(p) で、10 進の基準文字以降の桁数を指定します。 p の値が 0(ゼロ)であった場合、基準文字と それ以降の数値は省略されます。右精度が指定されていない場合、 使用中の現在のロケールからデフォルト値を検出します。 フォーマットされる数値は、フォーマット前にこの桁数に丸められます。

変換文字
i
 ロケールの国際通貨フォーマット(例: USA ロケールでは USD 1,234.56)によってフォーマットします。
n
 ロケールの国内通貨フォーマット(例: de_DE ロケールでは EU1.234,56) によってフォーマットします。
%
 % 文字を返します。


float $number (必須)
 フォーマットしたい数値

返値 string
フォーマットされた文字列。number に数値以外を指定した場合 NULL を返却し、 E_WARNING エラーが出ます。

解説

number で渡された数値を指定された通貨表記のフォーマットで返します。小数点の処理は「偶数への丸目」処理が行われます。偶数への丸目とは端数が0.5より小さい場合は切り捨て、大きい場合は切り上げですが、端数がちょうど0.5の場合が特殊となり、結果が偶数となる方へ丸める処理です。
※windows 環境ではこの関数は利用できません。また利用前は、setlocale() で適切なデフォルトロケールを設定してください。これらについては以下を参照してください。


注意: システムで strfmon が使用可能な場合のみ money_format() 関数が定義されます。例えば、Windows では strfmon は使用できません。 そのため money_format() は Windows では 定義されていません。


注意: ロケール設定のうち、LC_MONETARY カテゴリの内容が この関数の振る舞いに影響します。この関数を使用する前に、 setlocale() で適切なデフォルトロケールを 設定してください。

記述サンプル

//数値を指定
$number = 123456.7890123;

//日本の国際フォーマットを指定後実行
setlocale(LC_MONETARY, "ja_JP.UTF8");
echo money_format("%i", $number) . "\n";

//結果表示
//JPY 123,457 

//日本の国内フォーマットを指定後実行
setlocale(LC_MONETARY, "ja_JP.UTF8");
echo money_format("%n", $number) . "\n";

//結果表示
//¥123,457 

// en_US の国際フォーマットを指定後実行
setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', $number) . "\n";

//結果表示
//USD 123,456.79 

//日本の国内フォーマットで小数点以下 2 桁で表示します
setlocale(LC_MONETARY, 'ja_JP.UTF8');
echo money_format('%.2n', $number) . "\n";

//結果表示
//¥123,456.79 

// マイナスを指定
$number = -1234.5672;

// 負の数の場合は () を使用し、左精度を 10 桁に指定
setlocale(LC_MONETARY, 'ja_JP.UTF8');
echo money_format('%(#10n', $number) . "\n";

//結果表示
//(¥ 1,235) 

//上記の加え、右精度を 2 桁、数値埋め文字として '0' を指定
echo money_format('%=0(#10.2n', $number) . "\n";

//結果表示
//(¥000000001,234.57) 

// 使用例
echo money_format('%i 円の商品が、10%% 割引セール中!', 1234.56) . "\n";
//結果表示
//JPY 1,235 円の商品が、10% 割引セール中! 

参考リンク

NumberFormatter::formatCurrency 通貨の値をフォーマットする
number_format 数字を千区切り・小数点の桁などでフォーマットする
printf 文字列を指定のフォーマットにしたがって出力する
setlocale ロケール情報の設定を行う
sprintf 文字列を指定されたフォーマットで整形して返却
sscanf 文字列を指定したフォーマットに基づいて整形し返却する

タグ

通貨 フォーマット String 文字列


公式リファレンス

書式

money_format ( string $format , float $number ) : string

説明

money_format() は、number をフォーマットして返します。この関数は C のライブラリ関数 strfmon() をラップしたものですが、一度に 変換できる数値がひとつだけであるという点が異なります。

パラメータ

format
フォーマット指定の書式は以下の順になります。
  • % 文字
  • フラグ(オプション)
  • フィールドの幅(オプション)
  • 左精度(オプション)
  • 右精度(オプション)
  • 変換文字(必須)
フラグ
以下のフラグのうちひとつあるいは複数が使用可能です。
=f
文字 = の後に続く(シングルバイトの)文字 f が、数値埋め文字として使用されます。 デフォルトはスペース文字です。
^
グループ化文字(現在のロケールで定義されている)を使用しないようにします。
+ あるいは (
正の数、負の数の書式を指定します。+ が使用された場合、 + および - に該当する そのロケールの符号マークが使用されます。( が使用された場合、負の数は括弧で囲まれます。何も指定しなかった場合、 デフォルトは + です。
!
出力文字列から通貨記号を除きます。
-
指定した場合、すべてのフィールドを左詰め(右側に数値埋め文字が追加される) にします。デフォルトはこれと反対で、すべてのフィールドを右詰め (左側に数値埋め文字が追加される)にします。
フィールドの幅
w
10 進の数値形式の文字列で、フィールドの幅の最小値を指定します。フラグ - が使用されていない限り、フィールドは 右詰めとなります。デフォルト値は 0(ゼロ) です。
左精度
#n
10 進の基準文字(例: 小数点)より左側の最大の桁数 (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() で適切なデフォルトロケールを 設定してください。
警告この関数は PHP 7.4.0 で非推奨になります。この関数に頼らないことを強く推奨します。

更新履歴

バージョン 説明
7.4.0 この関数は非推奨になりました。 代わりに、NumberFormatter::formatCurrency() を使ってください。

サンプル

例1 money_format() の例

この関数の使用法を詳しく説明するために、 さまざまなロケールおよびフォーマット指定を使用します。

$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() - 数字を千位毎にグループ化してフォーマットする
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール