所以我有一个内部循环情况,浮点缓冲区和整数值将以字符串格式复制到另一个缓冲区。
在格式化字符串时,舍入和插入千位分隔符的替代方法是什么?无论我最终使用哪种方法,它都必须足够灵活,允许不同的格式。此外,因为这是一个内循环场景,我想尽可能优化任何解决方案。
似乎locale.h
是一种方法。但在这种情况下,我如何设置自定义区域设置,以及如何实际使用它们?还是有一个更好的选择?如果这是一个菜鸟问题,请指出我正确的方向。
编辑:
以下是一些澄清的例子:
1000
提供1,000
(如果我想将,
用作千位分隔符)
1000
提供1 000
(如果我想将space
用作千位分隔符)
1000.123
给出1,000.1
(如果我要舍入到一位数并使用,
作为千位分隔符)
0
给出``(如果我想将零显示为空字符串)
我正在使用POSIX系统...
答案 0 :(得分:3)
您可以尝试使用setlocale
设置区域设置,并使用带有'
标记的printf和用于舍入的精度值。这是否有效取决于您的C库。
请参阅以下程序:
#include <locale.h>
#include <stdio.h>
int main()
{
double value = 1234567890.123;
if (!setlocale(LC_ALL, "en_US.utf8")) {
fprintf(stderr, "Locale not found.\n");
return 1;
}
printf("%'.0f\n", value);
printf("%'.1f\n", value);
return 0;
}
在我的Ubuntu系统上,输出为:
1,234,567,890
1,234,567,890.1