CString.Formatを使用して1500000を、
1,500,000のように3桁毎にカンマを入れたいのですが、
どのような書式指定子で実現できますでしょうか?
おそらく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();
}
こんな感じでいけるかな?
各国家・地方・言語ローカルな通貨フォーマットで表示したいのか
(その場合、区切り記号はカンマでない場合があったり・・・)
通貨フォーマットに依存せず単に3桁表示がしたいのか
でやるべき内容は異なると思う。
CString::Format 単体ではできない、のは同意見。
前者なら COleCurrency あたりから調べてみればいいと思う。
後者なら単に1000で割って文字化+結合するだけ。
ツイート | ![]() |