# std::put_money

< cpp‎ | io‎ | manip

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

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

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

### 参数

mon | - | 货币值， long double 或 std::basic_string 之一
intl | - | 若为 true 则使用国际通货字符串，否则使用通货符号

### 返回值

返回未指定类型的对象，使若 `out` 为 std::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

### 参阅

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