我正试着把千位分隔符设为“。”或空格和小数分隔符到“,”。
我在Windows 10上使用gcc.exe (由Brecht Sanders构建的MinGW-W64x86_64-posix-seh) 12.1.0。
当我试图编译这段代码时:
#include <stdio.h>
#include <locale.h>
int main(void)
{
setlocale(LC_ALL, "French");
int a = 1000000;
float b = 1.10F;
printf("%'d.\n", a);
printf("%'g.\n", b);
return 0;
}它的产出如下:
,000,0001,1。
你知道怎么回事吗?
顺便说一下,setlocale(LC_ALL,“FR-FR”)没有任何效果。
提前谢谢你的帮助。
发布于 2022-05-23 15:17:22
在Windows上,使用针对x86_64-w64-mingw32 32的gcc.exe,下面的代码将输出"3,141593“。然而,在针对x86_64-pc-msys的gcc.exe编译器上,代码将输出"3.141593“。在我看来,Windows实际上更关心地区。我认为您应该切换到使用MinGW,或者,如果这不是一个选项,则sprintf转换为一个变量,并替换最后一个‘。与',‘和一切,除了最后',’‘与'.’。
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define PI 3.14159265
int main(void)
{
setlocale(LC_NUMERIC, "French");
printf("%f\n", PI);
return EXIT_SUCCESS;
}编辑:对不起,我误解了这个问题。我真的不知道数千个分隔符是如何与地区交互的,所以我能提供的唯一功能就是用逗号代替点,用点代替逗号。请注意,您需要将您的数字转换为具有像sprintf这样的字符串才能工作。
void to_european_format(char * string)
{
size_t i = 0;
while (string[i] != '\0')
{
if (string[i] == '.')
string[i] = ',';
else if (string[i] == ',')
string[i] = '.';
i++;
}
return;
}https://stackoverflow.com/questions/72349537
复制相似问题