put_moneyとmoney_put
コメントなし
某所でC++11のput_moneyで盛り上がっていたので、それに関連してC++03だとこうなるという話を書きます。
まず、C++11だとこんな風に書けるのです。
#include <iostream> #include <iomanip> #include <locale> int main() { std::string loc; std::cin >> loc; std::locale l(loc.c_str()); std::cout.imbue(l); double x = 123456.789; std::cout << std::put_money(x, false) << std::endl; } |
put_moneyはlocaleに従って金額の書式で出力するマニピュレータです。
C++03でも、localeを直接叩けば同じ出力が得られます。
#include <iostream> #include <locale> int main() { std::string loc; std::cin >> loc; std::locale l(loc.c_str()); std::cout.imbue(l); double x = 123456.789; std::money_put<char> const& m = std::use_facet<std::money_put<char>>(l); m.put(std::cout, false, std::cout, ' ', x); std::cout << std::endl; } |
なお、この金額書式の情報は、C++で新規に登場したのではなく、Cでも存在しました。CだとLC_MONETARYのsetlocaleとlocaleconv/lconvです。
スポンサード リンク |
この記事のカテゴリ
- C++ ⇒ put_moneyとmoney_put