我想使用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。
非常感謝您的建議。
這能否幫助 - http://stackoverflow.com/a/7276879/763026 –
謝謝,但這是非常C++。我特別想知道爲什麼_sprintf_l不使用locale說它應該或者如果我做錯了什麼的千字節。不過分習慣於WIN32環境。 –