money_format
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
money_format — 將數字格式化成貨幣字串
說明
$format
, float $number
): string
money_format() 返回格式化好的
number
版本。
此函式包裝了 C 函式庫中的 strfmon(),不同之處是:此實現每次只能轉化一個數字。
參數
-
format
-
格式字串由以下幾部分組成:
單個
%
字元可選的標記(flags)
可選的欄位寬度
可選的,左側精度
可選的,右側精度
必選的,單個轉化字元
標記(Flags)
可選多個標記,分別是:
-
=
f -
字元:
=
,並緊跟一個字元(單位元組) f,用於數字填充。預設的填充字元是空格。 -
^
-
禁用分組字元(比如金額中的逗號。在本地區域設定 locale 中定義)。
-
+
or(
-
正負數字的格式。使用
+
,將使用區域設定(locale)中相當於+
和-
的符號。 如果使用(
,負數將被圓括號圍繞。不設定的話,預設為+
。 -
!
-
不輸出貨幣符號(比如 ¥)。
-
-
-
有這個符號的時候,將使欄位左對齊(填充到右邊),預設是相反的,是右對齊的(填充到左邊)。
欄位寬度
- w
-
十進制數值字串的寬度。欄位將右對齊,除非使用了
-
標記。預設值 0。
左側精度
-
#
n -
小數字元(比如小數點)前的最大位數 (n)。 常用於同一列中的格式對齊。 如果位數小於 n 則使用填充字元填滿。 如果實際位數大於 n,此設定將被忽略。
如果沒用
^
標識禁用分組,分組分隔符會在新增填充字元之前插入(如果有的話)。 分組分隔符不會應用到填充字元里,哪怕填充字元是個數字。爲了保證對齊,出現在之前或者之後的字元,都會填充必要的空格,保證正負情況下長度都一樣。
右側精度
-
.
p -
小數點后的一段數字 (p)。 如果 p 的值是 0(零),小數點右側的數值將被刪除。 如果不使用這個標記,預設展現取決於目前的區域設定。 小數點后指定位數的數字,四捨五入格式化。
轉化字元
-
i
-
根據國際化區域設定中的貨幣格式,格式化數值。(比如,locale 是 USA:USD 1,234.56)。
-
n
-
根據國際化區域設定中國家的貨幣格式,格式化數值。(比如,locale 是 de_DE:EU1.234,56)。
-
%
-
返回字元
%
。
-
number
-
需要格式化的數字。
返回值
返回格式化后的字元。格式字串前後的字元將原封不動返回。
傳入的 number
如果不是數字,將返回 null
並且產生
E_WARNING
。
註釋
注意:
具有 strfmon 的系統才有 money_format() 函式。 例如 Windows 不具備,所以 Windows 系統上 money_format() 未定義。
注意:
locale 設定中,
LC_MONETARY
會影響此函式的行為。 在使用函式前,首先要用 setlocale() 來設定合適的區域設定(locale)。
範例
示例 #1 money_format() 例子
使用不同的 locale 和格式字串,來說明此函式的用法。
<?php
$number = 1234.56;
// 讓我們列印 en_US locale 的國際化格式
setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', $number) . "\n";
// USD 1,234.56
// 意大利國家的格式,帶兩位浮點小數`
setlocale(LC_MONETARY, 'it_IT');
echo money_format('%.2n', $number) . "\n";
// Eu 1.234,56
// 負數的使用
$number = -1234.5672;
// 美國國家的格式,使用圓括號 () 標記負數。
// 左側精度使用十位
setlocale(LC_MONETARY, 'en_US');
echo money_format('%(#10n', $number) . "\n";
// ($ 1,234.57)
// 相似的格式,新增了右側兩位小數點的精度,同時用 * 來填充
echo money_format('%=*(#10.2n', $number) . "\n";
// ($********1,234.57)
// 讓我們左對齊,14位寬,左側八位,右側兩位,不帶分組字元
// 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() - 以千位分隔符方式格式化一個數字