uTools-Manuals/docs/php/money_format.html
2019-04-28 19:00:34 +08:00

333 lines
16 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>将数字格式化成货币字符串</title>
</head>
<body class="docs"><div id="layout">
<div id="layout-content"><div id="function.money-format" class="refentry">
<div class="refnamediv">
<h1 class="refname">money_format</h1>
<p class="verinfo">(PHP 4 &gt;= 4.3.0, PHP 5, PHP 7)</p><p class="refpurpose"><span class="refname">money_format</span> &mdash; <span class="dc-title">将数字格式化成货币字符串</span></p>
</div>
<div class="refsect1 description" id="refsect1-function.money-format-description">
<h3 class="title">说明</h3>
<div class="methodsynopsis dc-description">
<span class="methodname"><strong>money_format</strong></span>
( <span class="methodparam"><span class="type">string</span> <code class="parameter">$format</code></span>
, <span class="methodparam"><span class="type">float</span> <code class="parameter">$number</code></span>
) : <span class="type">string</span></div>
<p class="para rdfs-comment">
<span class="function"><strong>money_format()</strong></span> 返回格式化好的
<code class="parameter">number</code> 版本。
此函数包装了 C 函数库中的 <span class="function"><strong>strfmon()</strong></span>,不同之处是:此实现每次只能转化一个数字。
</p>
</div>
<div class="refsect1 parameters" id="refsect1-function.money-format-parameters">
<h3 class="title">参数</h3>
<p class="para">
<dl>
<dt>
<code class="parameter">format</code></dt>
<dd>
<p class="para">
格式字符串由以下几部分组成:
<ul class="itemizedlist">
<li class="listitem"><p class="para">单个 <em>%</em> 字符</p></li>
<li class="listitem"><p class="para">可选的标记flags</p></li>
<li class="listitem"><p class="para">可选的字段宽度</p></li>
<li class="listitem"><p class="para">可选的,左侧精度</p></li>
<li class="listitem"><p class="para">可选的,右侧精度</p></li>
<li class="listitem"><p class="para">必选的,单个转化字符</p></li>
</ul>
</p>
<p class="formalpara">
<h5 class="title">标记(Flags)</h5>
<p class="para">
可选多个标记,分别是:
<dl>
<dt>
<em>=</em><span class="replaceable">f</span></dt>
<dd>
<p class="para">
字符:<em>=</em>,并紧跟一个字符(单字节) <span class="replaceable">f</span>,用于数字填充。默认的填充字符是空格。
</p>
</dd>
<dt>
<em>^</em></dt>
<dd>
<p class="para">
禁用分组字符(比如金额中的逗号。在本地区域设置 locale 中定义)。
</p>
</dd>
<dt>
<em>+</em> or <em>(</em></dt>
<dd>
<p class="para">
正负数字的格式。使用 <em>+</em>将使用区域设置locale中相当于 <em>+</em><em>-</em> 的符号。
如果使用 <em>(</em>,负数将被圆括号围绕。不设置的话,默认为
<em>+</em>
</p>
</dd>
<dt>
<em>!</em></dt>
<dd>
<p class="para">
不输出货币符号(比如 ¥)。
</p>
</dd>
<dt>
<em>-</em></dt>
<dd>
<p class="para">
有这个符号的时候,将使字段左对齐(填充到右边),默认是相反的,是右对齐的(填充到左边)。
</p>
</dd>
</dl>
</p>
</p>
<p class="formalpara">
<h5 class="title">字段宽度</h5>
<p class="para">
<dl>
<dt>
<span class="replaceable">w</span></dt>
<dd>
<p class="para">
十进制数值字符串的宽度。字段将右对齐,除非使用了 <em>-</em> 标记。默认值 0。
</p>
</dd>
</dl>
</p>
</p>
<p class="formalpara">
<h5 class="title">左侧精度</h5>
<p class="para">
<dl>
<dt>
<em>#</em><span class="replaceable">n</span></dt>
<dd>
<p class="para">
小数字符(比如小数点)前的最大位数 (<span class="replaceable">n</span>)。
常用于同一列中的格式对齐。
如果位数小于 <span class="replaceable">n</span> 则使用填充字符填满。
如果实际位数大于 <span class="replaceable">n</span>,此设置将被忽略。
</p>
<p class="para">
如果没用 <em>^</em> 标识禁用分组,分组分隔符会在添加填充字符之前插入(如果有的话)。
分组分隔符不会应用到填充字符里,哪怕填充字符是个数字。
</p>
<p class="para">
为了保证对齐,出现在之前或者之后的字符,都会填充必要的空格,保证正负情况下长度都一样。
</p>
</dd>
</dl>
</p>
</p>
<p class="formalpara">
<h5 class="title">
右侧精度
</h5>
<p class="para">
<dl>
<dt>
<em>.</em><span class="replaceable">p</span></dt>
<dd>
<p class="para">
小数点后的一段数字
(<span class="replaceable">p</span>)。
如果 <span class="replaceable">p</span> 的值是 0小数点右侧的数值将被删除。
如果不使用这个标记,默认展现取决于当前的区域设置。
小数点后指定位数的数字,四舍五入格式化。
</p>
</dd>
</dl>
</p>
</p>
<p class="formalpara">
<h5 class="title">
转化字符
</h5>
<p class="para">
<dl>
<dt>
<em>i</em></dt>
<dd>
<p class="para">
根据国际化区域设置中的货币格式格式化数值。比如locale 是 USAUSD 1,234.56)。
</p>
</dd>
<dt>
<em>n</em></dt>
<dd>
<p class="para">
根据国际化区域设置中国家的货币格式格式化数值。比如locale 是 de_DEEU1.234,56
</p>
</dd>
<dt>
<em>%</em></dt>
<dd>
<p class="para">
返回字符 <em>%</em>
</p>
</dd>
</dl>
</p>
</p>
</dd>
<dt>
<code class="parameter">number</code></dt>
<dd>
<p class="para">
需要格式化的数字。
</p>
</dd>
</dl>
</p>
</div>
<div class="refsect1 returnvalues" id="refsect1-function.money-format-returnvalues">
<h3 class="title">返回值</h3>
<p class="para">
返回格式化后的字符。格式字符串前后的字符将原封不动返回。
传入的 <code class="parameter">number</code> 如果不是数字,将返回 <strong><code>NULL</code></strong> 并且产生
<strong><code>E_WARNING</code></strong>
</p>
</div>
<div class="refsect1 notes" id="refsect1-function.money-format-notes">
<h3 class="title">注释</h3>
<blockquote class="note"><p><strong class="note">Note</strong>:
<p class="para">
具有 strfmon 的系统才有 <span class="function"><strong>money_format()</strong></span> 函数。
例如 Windows 不具备,所以 Windows 系统上 <span class="function"><strong>money_format()</strong></span> 未定义。
</p>
</p></blockquote>
<blockquote class="note"><p><strong class="note">Note</strong>:
<p class="para">
locale 设置中, <strong><code>LC_MONETARY</code></strong> 会影响此函数的行为。
在使用函数前,首先要用 <span class="function"><a href="setlocale.html" class="function">setlocale()</a></span> 来设置合适的区域设置locale
</p>
</p></blockquote>
</div>
<div class="refsect1 examples" id="refsect1-function.money-format-examples">
<h3 class="title">范例</h3>
<p class="para">
<div class="example" id="example-5924">
<p><strong>Example #1 <span class="function"><strong>money_format()</strong></span> 例子</strong></p>
<div class="example-contents"><p>
使用不同的 locale 和格式字符串,来说明此函数的用法。
</p></div>
<div class="example-contents">
<div class="phpcode"><pre><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /><br />$number&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1234.56</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;让我们打印&nbsp;en_US&nbsp;locale&nbsp;的国际化格式<br /></span><span style="color: #0000BB">setlocale</span><span style="color: #007700">(</span><span style="color: #0000BB">LC_MONETARY</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'en_US'</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #0000BB">money_format</span><span style="color: #007700">(</span><span style="color: #DD0000">'%i'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$number</span><span style="color: #007700">)&nbsp;.&nbsp;</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;USD&nbsp;1,234.56<br /><br />//&nbsp;意大利国家的格式,带两位浮点小数`<br /></span><span style="color: #0000BB">setlocale</span><span style="color: #007700">(</span><span style="color: #0000BB">LC_MONETARY</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'it_IT'</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #0000BB">money_format</span><span style="color: #007700">(</span><span style="color: #DD0000">'%.2n'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$number</span><span style="color: #007700">)&nbsp;.&nbsp;</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;Eu&nbsp;1.234,56<br /><br />//&nbsp;负数的使用<br /></span><span style="color: #0000BB">$number&nbsp;</span><span style="color: #007700">=&nbsp;-</span><span style="color: #0000BB">1234.5672</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;美国国家的格式,使用圆括号&nbsp;()&nbsp;标记负数。<br />//&nbsp;左侧精度使用十位<br /></span><span style="color: #0000BB">setlocale</span><span style="color: #007700">(</span><span style="color: #0000BB">LC_MONETARY</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'en_US'</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #0000BB">money_format</span><span style="color: #007700">(</span><span style="color: #DD0000">'%(#10n'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$number</span><span style="color: #007700">)&nbsp;.&nbsp;</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;($&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1,234.57)<br /><br />//&nbsp;相似的格式,添加了右侧两位小数点的精度,同时用&nbsp;*&nbsp;来填充<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">money_format</span><span style="color: #007700">(</span><span style="color: #DD0000">'%=*(#10.2n'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$number</span><span style="color: #007700">)&nbsp;.&nbsp;</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;($********1,234.57)<br /><br />//&nbsp;让我们左对齐14位宽左侧八位右侧两位不带分组字符<br />//&nbsp;de_DE&nbsp;的国际化格式<br /></span><span style="color: #0000BB">setlocale</span><span style="color: #007700">(</span><span style="color: #0000BB">LC_MONETARY</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'de_DE'</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #0000BB">money_format</span><span style="color: #007700">(</span><span style="color: #DD0000">'%=*^-14#8.2i'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1234.56</span><span style="color: #007700">)&nbsp;.&nbsp;</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;Eu&nbsp;1234,56****<br /><br />//&nbsp;让我们在格式字符串前后,添加一些简介<br /></span><span style="color: #0000BB">setlocale</span><span style="color: #007700">(</span><span style="color: #0000BB">LC_MONETARY</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'en_GB'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$fmt&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'The&nbsp;final&nbsp;value&nbsp;is&nbsp;%i&nbsp;(after&nbsp;a&nbsp;10%%&nbsp;discount)'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #0000BB">money_format</span><span style="color: #007700">(</span><span style="color: #0000BB">$fmt</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1234.56</span><span style="color: #007700">)&nbsp;.&nbsp;</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;The&nbsp;final&nbsp;value&nbsp;is&nbsp;&nbsp;GBP&nbsp;1,234.56&nbsp;(after&nbsp;a&nbsp;10%&nbsp;discount)<br /><br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</pre></div>
</div>
</div>
</p>
</div>
<div class="refsect1 seealso" id="refsect1-function.money-format-seealso">
<h3 class="title">参见</h3>
<p class="para">
<ul class="simplelist">
<li class="member"><span class="function"><a href="setlocale.html" class="function" rel="rdfs-seeAlso">setlocale()</a> - 设置地区信息</span></li>
<li class="member"><span class="function"><a href="sscanf.html" class="function" rel="rdfs-seeAlso">sscanf()</a> - 根据指定格式解析输入的字符</span></li>
<li class="member"><span class="function"><a href="sprintf.html" class="function" rel="rdfs-seeAlso">sprintf()</a> - Return a formatted string</span></li>
<li class="member"><span class="function"><a href="printf.html" class="function" rel="rdfs-seeAlso">printf()</a> - 输出格式化字符串</span></li>
<li class="member"><span class="function"><a href="number_format.html" class="function" rel="rdfs-seeAlso">number_format()</a> - 以千位分隔符方式格式化一个数字</span></li>
</ul>
</p>
</div>
</div></div></div></body></html>