hoju
hoju

Reputation: 29472

Pad python floats

I want to pad some percentage values so that there are always 3 units before the decimal place. With ints I could use '%03d' - is there an equivalent for floats?

'%.3f' works for after the decimal place but '%03f' does nothing.

Upvotes: 48

Views: 49519

Answers (4)

Mark
Mark

Reputation: 108567

You could use str.zfill as well:

str(3.3).zfill(5)
'003.3'

Upvotes: 10

noɥʇʎԀʎzɐɹƆ
noɥʇʎԀʎzɐɹƆ

Reputation: 10657

Alternatively, if you want to use .format:

              {:6.1f}
                ↑ ↑ 
                | |
# digits to pad | | # of decimal places to display

Copy paste: {:6.1f}

The 6 above includes digits to the left of the decimal, the decimal marker, and the digits to the right of the decimal.

Examples of usage:

'{:6.2f}'.format(4.3)
Out[1]: '  4.30'

f'{4.3:06.2f}'
Out[2]: '004.30'

'{:06.2f}'.format(4.3)
Out[3]: '004.30'

Upvotes: 29

Kolibril
Kolibril

Reputation: 1443

A short example:

var3= 123.45678
print(
    f'rounded1    \t {var3:.1f} \n' 
    f'rounded2    \t {var3:.2f} \n' 
    f'zero_pad1   \t {var3:06.1f} \n'  #<-- important line
    f'zero_pad2   \t {var3:07.1f}\n'   #<-- important line
    f'scientific1 \t {var3:.1e}\n'
    f'scientific2 \t {var3:.2e}\n'
)

Gives the output

rounded1         123.5 
rounded2         123.46 
zero_pad1        0123.5 
zero_pad2        00123.5
scientific1      1.2e+02
scientific2      1.23e+02

Upvotes: 5

Jonathan Graehl
Jonathan Graehl

Reputation: 9301

'%03.1f' works (1 could be any number, or empty string):

>>> "%06.2f"%3.3
'003.30'

>>> "%04.f"%3.2
'0003'

Note that the field width includes the decimal and fractional digits.

Upvotes: 58

Related Questions