2012-10-08 27 views
2

我想使用Windows的具體_sprintf_l根據德語區域設置格式化一倍;即逗號作爲小數點和句點千位分隔符。總之,我想「123456.789」看「123.456,79」(如果只打印兩位小數)。使用_sprintf_l格式化與千分之一秒的雙倍

char *loc = setlocale(LC_NUMERIC, "German"); 
double val = 123456.789; 
char buffer[32] = {0}; 
_locale_t localeinfo; 

localeinfo = _get_current_locale();   
_sprintf_l(buffer, "%.2f", localeinfo, val); 
printf("%s\n", buffer); 

結果::

然而,千位分隔符未在踢「123456,79」(即一個逗號作爲小數分隔)。

在調試器中查看localeinfo->lconv struct顯示decimal_point確實是逗號,而thousands_sep是句點,所以這很奇怪。

我需要處理_sprintf_l的任何特殊注意事項嗎?

當POSIX/XPG4可我能做到這一點:

#define _XOPEN_SOURCE 
#include <locale.h> 
// 
char *s = setlocale(LC_NUMERIC, "De_DE.IBM-1141");  
double d = 123456.789; 
char s1[100];          

printf("%s %'.2f\n", s, d);  

...它打印預期123.456,79。

非常感謝您的建議。

+1

這能否幫助 - http://stackoverflow.com/a/7276879/763026 –

+0

謝謝,但這是非常C++。我特別想知道爲什麼_sprintf_l不使用locale說它應該或者如果我做錯了什麼的千字節。不過分習慣於WIN32環境。 –

回答