3

因此,我有一个内部循环情况,其中包含浮点和整数值的缓冲区,这些缓冲区要以字符串格式复制到另一个缓冲区。

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

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

编辑:

这里有几个例子来澄清:

1000给出1,000(如果我想,用作千位分隔符)

1000给出1 000(如果我想space用作千位分隔符)

1000.123给出1,000.1(如果我想四舍五入并,用作千位分隔符)

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

顺便说一句,我在 POSIX 系统上...

4

1 回答 1

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
于 2013-05-08T14:32:07.607 回答