文字列を3桁区切りに書式指定するには?


Mr.T  2013-08-28 17:38:50  No: 73802  IP: [192.*.*.*]

CString.Formatを使用して1500000を、
1,500,000のように3桁毎にカンマを入れたいのですが、
どのような書式指定子で実現できますでしょうか?

編集 削除
Blue  2013-08-29 14:20:10  No: 73803  IP: [192.*.*.*]

おそらくCString::Fomratじゃできないんじゃないかな。

Windows APIのGetNumberFormat関数あたりで実現できそう。
小数がないのであれば

LPCTSTR value = _T("1500000");
CString s;

NUMBERFMT nf = {0};
nf.NumDigits     = 0;
nf.LeadingZero   = 0;
nf.Grouping      = 3;
nf.lpDecimalSep  = _T(".");
nf.lpThousandSep = _T(",");
nf.NegativeOrder = 1;
int nLength = ::GetNumberFormat(LOCALE_USER_DEFAULT, 0, value, &nf, NULL, 0);
if (nLength > 0)
{
    if (::GetNumberFormat(LOCALE_USER_DEFAULT, 0, value, &nf, s.GetBufferSetLength(nLength), nLength) == 0) {
        // Error
    }
    s.ReleaseBuffer();
}

こんな感じでいけるかな?

編集 削除
tetrapod  2013-08-29 18:19:31  No: 73804  IP: [192.*.*.*]

各国家・地方・言語ローカルな通貨フォーマットで表示したいのか
(その場合、区切り記号はカンマでない場合があったり・・・)

通貨フォーマットに依存せず単に3桁表示がしたいのか

でやるべき内容は異なると思う。

CString::Format 単体ではできない、のは同意見。
前者なら COleCurrency あたりから調べてみればいいと思う。
後者なら単に1000で割って文字化+結合するだけ。

編集 削除