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.67AUD12,345.67AUD-12,345.67
ptb_braR$ 12.345,67-R$ 12.345,67BRL12.345,67BRL-12.345,67
enc_can$12,345.67-$12,345.67CAD12,345.67CAD-12,345.67
chs_chn¥12,345.67¥-12,345.67CNY12,345.67CNY-12,345.67
csy_cze12 345,67 Kč-12 345,67 KčCZK12 345,67CZK-12 345,67
dan_dnkkr. 12.345,67kr.- 12.345,67DKK12.345,67DKK-12.345,67
deu_deu12.345,67 €-12.345,67 €EUR12.345,67EUR-12.345,67
cht_hkgHK$12,345.67-HK$12,345.67HKD12,345.67HKD-12,345.67
hun_hun12 345,67 Ft-12 345,67 FtHUF12 345,67HUF-12 345,67
isl_isl1.234.567 kr.-1.234.567 kr.ISK1.234.567ISK-1.234.567
jpn_jpn¥1,234,567-¥1,234,567JPY1,234,567JPY-1,234,567
kor_kor₩1,234,567-₩1,234,567KRW1,234,567KRW-1,234,567
esm_mex$12,345.67-$12,345.67MXN12,345.67MXN-12,345.67
nor_norkr 12 345,67kr- 12 345,67NOK12 345,67NOK-12 345,67
plk_pol12 345,67 zł-12 345,67 złPLN12 345,67PLN-12 345,67
rus_rus12 345,67 р.-12 345,67 р.RUB12 345,67RUB-12 345,67
English_sgp$12,345.67-$12,345.67SGD12,345.67SGD-12,345.67
sve_swe12.345,67 kr-12.345,67 krSEK12.345,67SEK-12.345,67
des_cheFr. 12’345.67Fr.-12’345.67CHF12’345.67CHF-12’345.67
cht_twnNT$12,345.67-NT$12,345.67TWD12,345.67TWD-12,345.67
trk_tur12.345,67 ₺-12.345,67 ₺TRY12.345,67TRY-12.345,67
eng_gbr£12,345.67-£12,345.67GBP12,345.67GBP-12,345.67
enu_usa$12,345.67-$12,345.67USD12,345.67USD-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++の金額書式情報