数値の3桁区切り
d:id:youandi:20071109#p1
先日ネタにしたLinuxのprintfでは「'」で数値の3桁区切り可能なんだけど、今日はWindows上で数値の3桁区切りを実現する事に・・・。で実装を考えようとした際に使えそうなWin32APIがある事を思い出した。
数字文字列を、指定したロケールの通貨文字列として書式化します。
ちょっと試してみるかな。
#define STRICT 1 #include <windows.h> #include <tchar.h> #include <stdio.h> #include <locale.h> int _tmain( int argc, int, TCHAR* argv[], TCHAR* envp[] ) { (void)::_tsetlocale( LC_ALL, _T("") ); const TCHAR szNumber[] = _T("-123456789.123"); TCHAR szBuff[ 31 + 1 ]; CURRENCYFMT stCurrency; szBuff[ 0 ] = szBuff[ 31 ] = 0; (void)::ZeroMemory( &stCurrency, sizeof( stCurrency ) ); stCurrency.NumDigits = 3; // LOCALE_IDIGITS stCurrency.LeadingZero = 0; // LOCALE_ILZERO stCurrency.Grouping = 3; // 0〜9 stCurrency.lpDecimalSep = _T("."); stCurrency.lpThousandSep = _T(","); stCurrency.NegativeOrder = 2; // LOCALE_INEGCURR stCurrency.PositiveOrder = 0; // LOCALE_ICURRENCY stCurrency.lpCurrencySymbol = _T(""); (void)::GetCurrencyFormat( NULL, 0, szNumber, &stCurrency, szBuff, 31 ); _ftprintf( stdout, _T("%s\n"), szBuff ); (void)::fgetc( stdin ); return 0; }
実行結果
-123,456,789.123