C++ 参考手册

定义于头文件 <iomanip>
template< class MoneyT >
/*unspecified*/ put_money( const MoneyT& mon, bool intl = false );
(C++11 起)

用于表达式 out << put_money(mon, intl) 时,转换货币值 monout 中当前感染的 locale 的 std::money_put 平面所指定的字符表示。

out << put_money(mon, intl) 中的插入操作表现为有格式输出函数 (FormattedOutputFunction)

参数

mon - 货币值, long doublestd::basic_string 之一
intl - 若为 true 则使用国际通货字符串,否则使用通货符号

返回值

返回未指定类型的对象,使若 outstd::basic_ostream<CharT, Traits> 类型输出流的名称,则表达式 out << put_money(mon, intl) 表现如同执行下列代码:

typedef std::ostreambuf_iterator<CharT, Traits> Iter;
typedef std::money_put<CharT, Iter> MoneyPut;
const MoneyPut& mp = std::use_facet<MoneyPut>(out.getloc());
const Iter end = mp.put(Iter(out.rdbuf()), intl, out, out.fill(), mon);
if (end.failed())
    out.setstate(std::ios::badbit);

示例

#include <iostream>
#include <iomanip>
 
int main()
{
    long double mon = 123.45; // 或 std::string mon = "123.45";
 
    std::cout.imbue(std::locale("en_US.UTF-8"));
    std::cout << std::showbase
              << "en_US: " << std::put_money(mon)
              << " or " << std::put_money(mon, true) << '\n';
 
    std::cout.imbue(std::locale("ru_RU.UTF-8"));
    std::cout << "ru_RU: " << std::put_money(mon)
              << " or " << std::put_money(mon, true) << '\n';
 
    std::cout.imbue(std::locale("ja_JP.UTF-8"));
    std::cout << "ja_JP: " << std::put_money(mon)
              << " or " << std::put_money(mon, true) << '\n';
}

可能的输出:

en_US: $1.23 or USD  1.23
ru_RU: 1.23 руб or 1.23 RUB 
ja_JP: ¥123 or JPY  123

参阅

格式化货币值为字符序列以输出
(类模板)
(C++11)
剖析货币值
(函数模板)