_sprintf_l
ドイツ語のロケールに従って double をフォーマットするために Windows 固有のものを使用しようとしています。つまり、小数点としてのコンマと千単位の区切りとしてのピリオドです。要するに、「123456.789」を「123.456,79」のようにしたいと思います (小数点以下 2 桁のみを表示する場合)。
ただし、千単位の区切り記号は機能していません。
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 を出力します。
提案に非常に感謝します。