printf格式浮点数与填充

时间:2013-03-07 09:58:53

标签: c floating-point floating-point-conversion

以下测试代码会产生不需要的输出,即使我使用了宽度参数:

int main(int , char* [])
{
    float test = 1234.5f;
    float test2 = 14.5f;

    printf("ABC %5.1f DEF\n", test);
    printf("ABC %5.1f DEF\n", test2);

    return 0;
}

输出

ABC 1234.5 DEF   
ABC  14.5 DEF

如何实现这样的输出,使用哪种格式字符串?

ABC 1234.5 DEF   
ABC   14.5 DEF

2 个答案:

答案 0 :(得分:40)

以下内容应该正确排列所有内容:

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);

当我跑步时,我得到:

ABC 1234.5 DEF
ABC   14.5 DEF

问题是,在%5.1f中,5是为整个号码分配的字符数,1234.5占用的字符数超过五个。这会导致14.5与{{1}}不对齐,这符合五个字符。

答案 1 :(得分:8)

您正在尝试打印超过5个字符的内容,因此请将长度指示符放大:

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);

第一个值不是“点之前的数字”,而是“总长度”。