163 lines
22 KiB
HTML
163 lines
22 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>std::money_put<CharT,OutputIt>::put, do_put</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_locale_money_put_put skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::money_put<CharT,OutputIt>::</span>put, do_put</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-locale.html">locale</a>‎ | <a href="cpp-locale-money_put.html">money put</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-locale.html"><locale></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">public</span><span class="sy4">:</span><br /></span>
|
|
<p>iter_type put<span class="br0">(</span>iter_type out, <span class="kw4">bool</span> intl, <a href="cpp-io-ios_base.html"><span class="kw1669">std::<span class="me2">ios_base</span></span></a><span class="sy3">&</span> f,<br /></p>
|
|
char_type fill, <span class="kw4">long</span> <span class="kw4">double</span> quant<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span></div>
|
|
</td>
|
|
<td>(1)</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp">iter_type put<span class="br0">(</span>iter_type out, <span class="kw4">bool</span> intl, <a href="cpp-io-ios_base.html"><span class="kw1669">std::<span class="me2">ios_base</span></span></a><span class="sy3">&</span> f,<br />
|
|
char_type fill, <span class="kw4">const</span> string_type<span class="sy3">&</span> quant<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(2)</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">protected</span><span class="sy4">:</span><br /></span>
|
|
<p><span class="kw1">virtual</span> iter_type do_put<span class="br0">(</span>iter_type out, <span class="kw4">bool</span> intl, <a href="cpp-io-ios_base.html"><span class="kw1669">std::<span class="me2">ios_base</span></span></a><span class="sy3">&</span> str,<br /></p>
|
|
char_type fill, <span class="kw4">long</span> <span class="kw4">double</span> units<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span></div>
|
|
</td>
|
|
<td>(3)</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">virtual</span> iter_type do_put<span class="br0">(</span>iter_type out, <span class="kw4">bool</span> intl, <a href="cpp-io-ios_base.html"><span class="kw1669">std::<span class="me2">ios_base</span></span></a><span class="sy3">&</span> str,<br />
|
|
char_type fill, <span class="kw4">const</span> string_type<span class="sy3">&</span> digits<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(4)</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>格式化货币值并写结果到输出流。</p>
|
|
<div class="t-li1"><span class="t-li">1-2)</span> 公开成员函数,调用最终导出类的成员函数 <code>do_put</code> 。</div>
|
|
<div class="t-li1"><span class="t-li">3)</span> 如同用 <span class="t-c"><span class="mw-geshi cpp source-cpp">ct.<span class="me1">widen</span><span class="br0">(</span>buf1, buf1 <span class="sy2">+</span> <a href="cpp-io-c-fprintf.html"><span class="kw1847">std::<span class="me2">sprintf</span></span></a><span class="br0">(</span>buf1, <span class="st0">"%.0Lf"</span>, units<span class="br0">)</span>, buf2<span class="br0">)</span></span></span> 转换数值参数 <code>units</code> 为宽字符串,其中 <code>ct</code> 为 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">getloc</span><span class="br0">(</span><span class="br0">)</span></span></span> 中感染的 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-locale-ctype.html"><span class="kw1938">std::<span class="me2">ctype</span></span></a></span></span> 平面,而 <code>buf1</code> 和 <code>buf2</code> 是充分大的字符缓冲区。按后述方式处理、格式化结果字符串 <code>buf2</code> 并输出到 <code>out</code> 。</div>
|
|
<div class="t-li1"><span class="t-li">4)</span> 从字符串参数 <code>digits</code> 采取仅有的可选前导负号(以与 <code>ct.widen('-')</code> 比较确定,其中 <code>ct</code> 为 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">getloc</span><span class="br0">(</span><span class="br0">)</span></span></span> 中感染的 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-locale-ctype.html"><span class="kw1938">std::<span class="me2">ctype</span></span></a></span></span> 平面)和立即后随的数位字符(以 <code>ct</code> 分类)为字符序列,按后述方式处理、格式化,并输出到 <code>out</code> 。</div>
|
|
<p>给定来自先前步骤的字符序列,若首字符等于 <span class="t-c"><span class="mw-geshi cpp source-cpp">ct.<span class="me1">widen</span><span class="br0">(</span><span class="st0">'-'</span><span class="br0">)</span></span></span> ,则调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">mp.<span class="me1">neg_format</span><span class="br0">(</span><span class="br0">)</span></span></span> 获得格式化 <span class="t-lc"><a href="cpp-locale-money_base.html">pattern</a></span> ,否则调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">mp.<span class="me1">pos_format</span><span class="br0">(</span><span class="br0">)</span></span></span> ,其中 <code>mp</code> 为 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">getloc</span><span class="br0">(</span><span class="br0">)</span></span></span> 中感染的 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-locale-moneypunct.html"><span class="kw1972">std::<span class="me2">moneypunct</span></span></a><span class="sy1"><</span>CharT, intl<span class="sy1">></span></span></span> 平面。</p>
|
|
<p>依 <code>mp.grouping()</code> 、 <code>mp.frac_digits()</code> 、 <code>mp.decimal_point()</code> 和 <code>mp.thousands_sep()</code> 所要求插入千分隔符和小数点,而将结果字符串置于输出序列中的 <span class="t-lc"><a href="cpp-locale-money_base.html">value</a></span> 出现于格式化模式中的位置。</p>
|
|
<p>若 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">flags</span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&</span> str.<span class="me1">showbase</span></span></span> 非零(使用了 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-io-manip-showbase.html"><span class="kw1766">std::<span class="me2">showbase</span></span></a></span></span> 操纵符),则通过调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">mp.<span class="me1">curr_symbol</span><span class="br0">(</span><span class="br0">)</span></span></span> 生成通货符号或字符串,并将它置于输出序列中的 <span class="t-lc"><a href="cpp-locale-money_base.html">symbol</a></span> 出现于格式化模式中的位置。</p>
|
|
<p>若 <span class="t-c"><span class="mw-geshi cpp source-cpp">mp.<span class="me1">positive_sign</span><span class="br0">(</span><span class="br0">)</span></span></span> (使用正格式模式的情况下)或 <span class="t-c"><span class="mw-geshi cpp source-cpp">mp.<span class="me1">negative_sign</span><span class="br0">(</span><span class="br0">)</span></span></span> (使用负格式模式的情况下)返回带有多于一个字符的字符串,则将首字符置于输出序列中的 <span class="t-lc"><a href="cpp-locale-money_base.html">sign</a></span> 出现于格式化模式中的位置,而将剩余字符置于所有其他字符之后,例如格式化模式 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">{</span>sign, value, space, symbol<span class="br0">}</span></span></span> 用 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">123</span></span></span> 单位和 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">"-"</span></span></span> 的 negative_sign 会导致 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">"-1.23 €"</span></span></span> ,而 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">"()"</span></span></span> 的 negative_sign 会生成 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">"(1.23 €)"</span></span></span> 。</p>
|
|
<p>若为指定格式生成的字符数小于 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">width</span><span class="br0">(</span><span class="br0">)</span></span></span> 的返回值,则以如下方式,插入 <code>fill</code> 的副本以令输出序列的总长度准确达到 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">width</span><span class="br0">(</span><span class="br0">)</span></span></span> :</p>
|
|
<ul>
|
|
<li>若 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">flags</span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&</span> str.<span class="me1">adjustfield</span></span></span> 等于 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">internal</span></span></span> ,则插入填充字符到 <code>none</code> 或 <code>space</code> 出现于格式化模式中的位置。</li>
|
|
<li>否则,若 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">flags</span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&</span> str.<span class="me1">adjustfield</span></span></span> 等于 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">left</span></span></span> ,则后附 <code>fill</code> 的副本到所有其他字符后</li>
|
|
<li>否则,将填充字符置于所有其他字符前characters.</li>
|
|
</ul>
|
|
<p>最后,调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">str.<span class="me1">width</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span></span></span> 取消任何 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-io-manip-setw.html"><span class="kw1797">std::<span class="me2">setw</span></span></a></span></span> 的效果。</p>
|
|
<h3><span class="mw-headline" id=".E8.BF.94.E5.9B.9E.E5.80.BC">返回值</span></h3>
|
|
<p>指向最后产生字符立即后方的迭代器。</p>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E6.84.8F">注意</span></h3>
|
|
<p>假设通货单位为货币的最小非小数单位:美国中为美分,日本中为日元。</p>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <iostream></span>
|
|
<span class="co2">#include <iomanip></span>
|
|
<span class="co2">#include <locale></span>
|
|
|
|
<span class="kw1">struct</span> my_punct <span class="sy4">:</span> <a href="cpp-locale-moneypunct_byname.html"><span class="kw1982">std::<span class="me2">moneypunct_byname</span></span></a><span class="sy1"><</span><span class="kw4">char</span>, <span class="kw2">false</span><span class="sy1">></span> <span class="br0">{</span>
|
|
my_punct<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> name<span class="br0">)</span> <span class="sy4">:</span> moneypunct_byname<span class="br0">(</span>name<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
|
|
string_type do_negative_sign<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="st0">"()"</span><span class="sy4">;</span> <span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<a href="cpp-locale-locale.html"><span class="kw1894">std::<span class="me2">locale</span></span></a> loc<span class="br0">(</span><span class="st0">"ru_RU.utf8"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a>.<span class="me1">imbue</span><span class="br0">(</span>loc<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">long</span> <span class="kw4">double</span> units <span class="sy1">=</span> <span class="sy2">-</span><span class="nu16">123.45</span><span class="sy4">;</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"In Russian locale, "</span> <span class="sy1"><<</span> units <span class="sy1"><<</span> <span class="st0">" prints as "</span>
|
|
<span class="sy1"><<</span> <a href="cpp-io-manip-showbase.html"><span class="kw1766">std::<span class="me2">showbase</span></span></a><span class="sy4">;</span>
|
|
<span class="co1">// 注意:以下等价于简单的 std::put_money(units)</span>
|
|
<a href="cpp-locale-use_facet.html"><span class="kw1897">std::<span class="me2">use_facet</span></span></a><span class="sy1"><</span><a href="cpp-locale-money_put.html"><span class="kw1968">std::<span class="me2">money_put</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">>></span><span class="br0">(</span>loc<span class="br0">)</span>.<span class="me1">put</span><span class="br0">(</span>
|
|
<span class="br0">{</span><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a><span class="br0">}</span>, <span class="kw2">false</span>, <a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a>, <a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a>.<span class="me1">fill</span><span class="br0">(</span><span class="br0">)</span>, units<span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a>.<span class="me1">imbue</span><span class="br0">(</span><a href="cpp-locale-locale.html"><span class="kw1894">std::<span class="me2">locale</span></span></a><span class="br0">(</span><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a>.<span class="me1">getloc</span><span class="br0">(</span><span class="br0">)</span>, new my_punct<span class="br0">(</span><span class="st0">"ru_RU.utf8"</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"With negative_sign set to <span class="es1">\"</span>()<span class="es1">\"</span>, it prints as "</span><span class="sy4">;</span>
|
|
<a href="cpp-locale-use_facet.html"><span class="kw1897">std::<span class="me2">use_facet</span></span></a><span class="sy1"><</span><a href="cpp-locale-money_put.html"><span class="kw1968">std::<span class="me2">money_put</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">>></span><span class="br0">(</span>loc<span class="br0">)</span>.<span class="me1">put</span><span class="br0">(</span>
|
|
<span class="br0">{</span><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a><span class="br0">}</span>, <span class="kw2">false</span>, <a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a>, <a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a>.<span class="me1">fill</span><span class="br0">(</span><span class="br0">)</span>, units<span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">In Russian locale, -123,45 prints as -1.23 руб
|
|
With negative_sign set to "()", it prints as (1.23 руб)</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-locale-moneypunct.html"><span class="t-lines"><span>moneypunct</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>定义 <span class="t-lc"><a href="cpp-locale-money_get.html">std::money_get</a></span> 与 <span class="t-lc"><a href="cpp-locale-money_put.html">std::money_put</a></span> 所用的货币格式解析器的参数<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-locale-money_get.html"><span class="t-lines"><span>money_get</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>从输入字符序列中解析并构造货币值<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-io-manip-put_money.html"><span class="t-lines"><span>put_money</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>格式化并输出货币值<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|