在C中使用舍入和千位分隔符格式化字符串的最有效方法是什么?

时间:2013-05-08 14:11:32

标签: c string locale rounding

所以我有一个内部循环情况,浮点缓冲区和整数值将以字符串格式复制到另一个缓冲区。

在格式化字符串时,舍入和插入千位分隔符的替代方法是什么?无论我最终使用哪种方法,它都必须足够灵活,允许不同的格式。此外,因为这是一个内循环场景,我想尽可能优化任何解决方案。

似乎locale.h是一种方法。但在这种情况下,我如何设置自定义区域设置,以及如何实际使用它们?还是有一个更好的选择?如果这是一个菜鸟问题,请指出我正确的方向。

编辑:

以下是一些澄清的例子:

1000提供1,000(如果我想将,用作千位分隔符)

1000提供1 000(如果我想将space用作千位分隔符)

1000.123给出1,000.1(如果我要舍入到一位数并使用,作为千位分隔符)

0给出``(如果我想将零显示为空字符串)

我正在使用POSIX系统...

1 个答案:

答案 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