gpt4 book ai didi

c - 使用 _sprintf_l 以 thousands_sep 格式化 double

转载 作者:可可西里 更新时间:2023-11-01 10:27:06 25 4
gpt4 key购买 nike

我正在尝试使用 Windows 特定的 _sprintf_l 根据德语区域设置格式化 double ;即逗号作为小数点,句点作为千位分隔符。简而言之,我希望“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。

非常感谢您的建议。

最佳答案

您的代码是正确的。令人惊讶的是,“_l”版本似乎根本不起作用。并且永远不会工作(关闭为 wontfix!)

https://connect.microsoft.com/VisualStudio/feedback/details/523503/sprintf-l-and-vsnprintf-l-and-relatives-does-not-respect-passed-locale

关于c - 使用 _sprintf_l 以 thousands_sep 格式化 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12778004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com