百科狗-知识改变命运!
--

money_format() - 将数字格式化成货币字符串 - php 字符串函数

百变鹏仔1年前 (2023-11-21)阅读数 36#技术干货
文章标签字符

money_format()

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

将数字格式化成货币字符串

说明

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

money_format()返回格式化好的$number版本。此函数包装了 C 函数库中的strfmon(),不同之处是:此实现每次只能转化一个数字。

参数

$format

格式字符串由以下几部分组成:

  • 单个%字符

  • 可选的标记(flags)

  • 可选的字段宽度

  • 可选的,左侧精度

  • 可选的,右侧精度

  • 必选的,单个转化字符

标记(Flags)

可选多个标记,分别是:

=f

字符:=,并紧跟一个字符(单字节)f,用于数字填充。默认的填充字符是空格。

^

禁用分组字符(比如金额中的逗号。在本地区域设置 locale 中定义)。

+or(

正负数字的格式。使用+,将使用区域设置(locale)中相当于+-的符号。如果使用(,负数将被圆括号围绕。不设置的话,默认为+

!

不输出货币符号(比如¥)。

-

有这个符号的时候,将使字段左对齐(填充到右边),默认是相反的,是右对齐的(填充到左边)。

字段宽度
w

十进制数值字符串的宽度。字段将右对齐,除非使用了-标记。默认值 0。

左侧精度
#n

小数字符(比如小数点)前的最大位数(n)。常用于同一列中的格式对齐。如果位数小于n则使用填充字符填满。如果实际位数大于n,此设置将被忽略。

如果没用^标识禁用分组,分组分隔符会在添加填充字符之前插入(如果有的话)。分组分隔符不会应用到填充字符里,哪怕填充字符是个数字。

money_format() - 将数字格式化成货币字符串 - php 字符串函数

为了保证对齐,出现在之前或者之后的字符,都会填充必要的空格,保证正负情况下长度都一样。

右侧精度
.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 string
  • printf()输出格式化字符串
  • 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

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)