如何使用C中的printf()格式在double前面预留空格

时间:2015-04-18 06:38:03

标签: c++ c formatting printf double

考虑使用C编程语言的代码:

double d = 3.4;
printf("%02.2f", d);

double d = 3.4;
printf("%2.2f", d);

运行这些代码块时得到的输出是:

3.40

我正在尝试格式化一个表,并且需要在double或float前面保留空格,以便我的表不会画出歪斜。

获得输出的最佳方法是什么

03.40

按预期?

2 个答案:

答案 0 :(得分:6)

double d = 3.4;
printf("%05.2f", d);

宽度字段用于整个转换后的字符串(不仅仅是整个数字部分)。

答案 1 :(得分:0)

03.40似乎不是一个好的解决方案。您应该添加前导或尾随空格,而不是零。

最好的选择是使用snprintf

const size_t buffer_size = 16;

double value = 3.40;
char buffer[buffer_size];
int result = snprintf(buffer, buffer_size, "%.2f", value);

if(result > 0 && result < buffer_size)
    printf("Length of string: %d (%s)\n", result, buffer);

输出:

Length of string: 4 (3.40)

在此处试用此代码:link

哦,还有一件事:snprintf是C ++ 11的一个特性。如果您无法访问符合C ++ 11的编译器,请使用不太安全的版本sprintf,或使用特定于平台的解决方案,如sprintf_s in case of Visual C++