我正在尝试使用特定_sprintf_l
于 Windows 来根据德语语言环境格式化双精度;即逗号作为小数点,句点作为千位分隔符。简而言之,我希望“123456.789”看起来像“123.456,79”(如果只打印两位小数)。
但是,千位分隔符没有起作用:
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。
非常感谢您的建议。