money_format() - 将数字格式化成货币字符串 - php 字符串函数
money_format()
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
将数字格式化成货币字符串
说明
money_format(string $format, float $number) : stringmoney_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
。
注释
Note:具有 strfmon 的系统才有money_format()函数。例如 Windows 不具备,所以 Windows 系统上money_format()未定义。Note:
locale 设置中,LC_MONETARY
会影响此函数的行为。在使用函数前,首先要用setlocale()来设置合适的区域设置(locale)。
范例
Example #1money_format()例子
使用不同的 locale 和格式字符串,来说明此函数的用法。
参见
setlocale()
设置地区信息sscanf()
根据指定格式解析输入的字符sprintf()
Return a formatted stringprintf()
输出格式化字符串number_format()
以千位分隔符方式格式化一个数字
For most of us in the US, we don't want to see a "USD" for our currency symbol, so '%i' doesn't cut it. Here's what I used that worked to get what most people expect to see for a number format. $number = 123.4 setlocale(LC_MONETARY, 'en_US.UTF-8'); money_format('%.2n', $number); output: $123.40 That gives me a dollar sign at the beginning, and 2 digits at the end.
This is a some function posted before, however various bugs were corrected. Thank you to Stuart Roe by reporting the bug on printing signals.
In Rafael M. Salvioni function localeconv(); returns an invalid array in my Windows XP SP3 running PHP 5.4.13 so to prevent the Warning Message: implode(): Invalid arguments passed i just add the $locale manually. For other languages just fill the array with the correct settings.
If money_format doesn't seem to be working properly, make sure you are defining a valid locale. For example, on Debian, 'en_US' is not a valid locale - you need 'en_US.UTF-8' or 'en_US.ISO-8559-1'. This was frustrating me for a while. Debian has a list of valid locales at /usr/share/i18n/SUPPORTED; find yours there if it's not working properly.
To drop zero value decimals, use the following:
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!