Search code examples
cfloating-pointfloating-point-conversion

printf format float with padding


The following test code produces an undesired output, even though I used a width parameter:

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;
}

Output

ABC 1234.5 DEF   
ABC  14.5 DEF

How to achieve an output like this, which format string to use?

ABC 1234.5 DEF   
ABC   14.5 DEF

Solution

  • The following should line everything up correctly:

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

    When I run this, I get:

    ABC 1234.5 DEF
    ABC   14.5 DEF
    

    The issue is that, in %5.1f, the 5 is the number of characters allocated for the entire number, and 1234.5 takes more than five characters. This results in misalignment with 14.5, which does fit in five characters.