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));
}

スポンサード リンク

この記事のカテゴリ

  • ⇒ Visual C++の金額書式情報
  • ⇒ Visual C++の金額書式情報