Search code examples
pythonstringpython-2.x

format () : ValueError: Precision not allowed in integer format specifier


I am a python newbie.I am just getting acquainted with format method.

From a book that I am reading to learn python

What Python does in the format method is that it substitutes each argument
value into the place of the specification. There can be more detailed specifications
such as:
decimal (.) precision of 3 for float '0.333'
>>> '{0:.3}'.format(1/3)
fill with underscores (_) with the text centered
(^) to 11 width '___hello___'
>>> '{0:_^11}'.format('hello')
keyword-based 'Swaroop wrote A Byte of Python'
>>> '{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python')

In the python interpreter if I try

print('{0:.3}'.format(1/3))

It gives the error

 File "", line 24, in 
ValueError: Precision not allowed in integer format specifier 

Solution

  • To print the floating point numbers, you have to have atleast one of the inputs as floats, like this

    print('{0:.3}'.format(1.0/3))
    

    If both the inputs are integers to the division operator, the returned result will also be in int, with the decimal part truncated.

    Output

    0.333
    

    You can convert the data to float with float function, like this

    data = 1
    print('{0:.3}'.format(float(data) / 3))