printf格式浮点数与填充

nab*_*lke 25 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;
}
Run Code Online (Sandbox Code Playgroud)

产量

ABC 1234.5 DEF   
ABC  14.5 DEF
Run Code Online (Sandbox Code Playgroud)

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

ABC 1234.5 DEF   
ABC   14.5 DEF
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 44

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

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:

ABC 1234.5 DEF
ABC   14.5 DEF
Run Code Online (Sandbox Code Playgroud)

问题是,在%5.1f中,5是分配给整个数字的字符数,并且1234.5需要超过五个字符.这导致未对准14.5,其确实适合五个字符.

  • @nabulke:是的,每个角色都很重要. (4认同)

Jas*_*onD 9

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

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);
Run Code Online (Sandbox Code Playgroud)

第一个值不是"点之前的数字",而是"总长度".