How do I pad a printf to take account of negative signs and variable length numbers?

20,007

Solution 1

The width specifier is the complete width:

printf("%05.1f\n", myVar);  // Total width 5, pad with 0, one digit after .

To get your expected format:

printf("% 06.1f\n", myVar);

Solution 2

follows Erik, but I find

printf("% 6.1f\n", myVar);

also works.

Share:
20,007
Jon Cage
Author by

Jon Cage

A Computer Systems Engineer based in the UK

Updated on January 18, 2020

Comments

  • Jon Cage
    Jon Cage over 4 years

    I'm trying to output some numbers in a log file and I want to pad a load of floats via the printf function to produce:

     058.0
     020.0
     038.0
    -050.0
     800.0
     150.0
     100.0
    

    Currently I'm doing this:

    printf("% 03.1f\n", myVar);
    

    ...where myVar is a float. The output from that statement looks like this:

    58.0
    20.0
    38.0
    -50.0
    800.0
    150.0
    100.0
    

    From what I've read I would expect my code to produce the output I mentioned at the top of this post, but clearly something is wrong. Can you only use one flag at a time? ..or is there something else going on here?

  • Jon Cage
    Jon Cage about 13 years
    Yep, that's it. I hadn't realised the padding included the decimal point etc. ...although it needs to be 06 to include the space or sign value.