2012年12月17日追記:これはVisual C++ 2012で利用できるすべてのロケールを網羅したものではありません。修正したVisual C++の金額書式情報・完全版 その2をご覧ください。
Visual C++ 2012のmoney_put/put_moneyで出力される結果を調べてみました。2012における変更ではなく、Visual C++全体としてどうであるかということを知りたいということが主目的です。
MSDNライブラリのCountry/Region Stringsに載っている国・地域を一通り出力させてみました。ただし、ユーロを採用している国については、ドイツを代表としそれ以外は省略しています。
“言語_地域”の形式の文字列で指定する必要があるため、言語は国・地域に合わせて適当に選んでいます。なお、実行環境はWindows 8 RTMです。Visual C++とWindowsともに日本語版です(これらの言語は結果に影響しないと思いますが)。
ena_aus | $12,345.67 | -$12,345.67 | AUD12,345.67 | AUD-12,345.67 |
---|---|---|---|---|
ptb_bra | R$ 12.345,67 | -R$ 12.345,67 | BRL12.345,67 | BRL-12.345,67 |
enc_can | $12,345.67 | -$12,345.67 | CAD12,345.67 | CAD-12,345.67 |
chs_chn | ¥12,345.67 | ¥-12,345.67 | CNY12,345.67 | CNY-12,345.67 |
csy_cze | 12 345,67 Kč | -12 345,67 Kč | CZK12 345,67 | CZK-12 345,67 |
dan_dnk | kr. 12.345,67 | kr.- 12.345,67 | DKK12.345,67 | DKK-12.345,67 |
deu_deu | 12.345,67 € | -12.345,67 € | EUR12.345,67 | EUR-12.345,67 |
cht_hkg | HK$12,345.67 | -HK$12,345.67 | HKD12,345.67 | HKD-12,345.67 |
hun_hun | 12 345,67 Ft | -12 345,67 Ft | HUF12 345,67 | HUF-12 345,67 |
isl_isl | 1.234.567 kr. | -1.234.567 kr. | ISK1.234.567 | ISK-1.234.567 |
jpn_jpn | ¥1,234,567 | -¥1,234,567 | JPY1,234,567 | JPY-1,234,567 |
kor_kor | ₩1,234,567 | -₩1,234,567 | KRW1,234,567 | KRW-1,234,567 |
esm_mex | $12,345.67 | -$12,345.67 | MXN12,345.67 | MXN-12,345.67 |
nor_nor | kr 12 345,67 | kr- 12 345,67 | NOK12 345,67 | NOK-12 345,67 |
plk_pol | 12 345,67 zł | -12 345,67 zł | PLN12 345,67 | PLN-12 345,67 |
rus_rus | 12 345,67 р. | -12 345,67 р. | RUB12 345,67 | RUB-12 345,67 |
English_sgp | $12,345.67 | -$12,345.67 | SGD12,345.67 | SGD-12,345.67 |
sve_swe | 12.345,67 kr | -12.345,67 kr | SEK12.345,67 | SEK-12.345,67 |
des_che | Fr. 12’345.67 | Fr.-12’345.67 | CHF12’345.67 | CHF-12’345.67 |
cht_twn | NT$12,345.67 | -NT$12,345.67 | TWD12,345.67 | TWD-12,345.67 |
trk_tur | 12.345,67 ₺ | -12.345,67 ₺ | TRY12.345,67 | TRY-12.345,67 |
eng_gbr | £12,345.67 | -£12,345.67 | GBP12,345.67 | GBP-12,345.67 |
enu_usa | $12,345.67 | -$12,345.67 | USD12,345.67 | USD-12,345.67 |
シンガポールは、言語のほうに適当な3文字のものが見当たらなかったので“English”を当てています(enuは英語(アメリカ)、engは英語(イギリス)というものなので)。
wchar_t版を使ったため、日本円と人民元はU+A5のほうの円記号が使われています。
以下、使用したプログラムです。
#include <iostream> #include <iomanip> #include <locale> #include <fstream> #include <sstream> using namespace std; void f(wostream& s, locale const& l) { s.imbue(l); s << showbase; s << put_money(L"1234567.89123", false) << '\t'; s << put_money(L"-1234567.89123", false) << '\t'; s << put_money(L"1234567.89123", true) << '\t'; s << put_money(L"-1234567.89123", true) << '\n'; } int main() { char const *locs[] = { "ena_aus", "ptb_bra", "enc_can", "chs_chn", "csy_cze", "dan_dnk", "deu_deu", "cht_hkg", "hun_hun", "isl_isl", "jpn_jpn", "kor_kor", "esm_mex", "nor_nor", "plk_pol", "rus_rus", "English_sgp", "sve_swe", "des_che", "cht_twn", "trk_tur", "eng_gbr", "enu_usa", }; wostringstream oss; for (auto s : locs) { oss << s << '\t'; f(oss, locale(s)); } auto s = oss.str(); ofstream os("loc-vc.txt", ios_base::binary); os.write( reinterpret_cast<char const*>(s.data()), s.size() * sizeof (wchar_t)); } |
スポンサード リンク |