[Tutor] Rounding Error
Steven D'Aprano
steve at pearwood.info
Sat Jan 28 07:20:20 CET 2012
Michael Lewis wrote:
> I am trying to round a float to two decimals, but I am getting the
> following error:
>
> Traceback (most recent call last):
> File "<pyshell#23>", line 1, in <module>
> PaintingProject()
> File "C:/Python27/Homework/Labs/Lab 03_5.py", line 42, in PaintingProject
> print 'That will cost you $%f.' %(round(5.6523),2)
> TypeError: not all arguments converted during string formatting
>
> Basically, I am writing a program to ask a user how many square feet they
> need to paint.
All this is irrelevant to your problem. Read the error message: it says that
you have more arguments than expected when doing the string formatting.
round() doesn't enter into it. You can get the same error if you do this:
print 'That will cost you $%f.' % (5.6523, 2)
You have one % target in the string, but two numbers trying to fit into it,
and Python refuses to guess if you want to use 5.6523 or 2.
And that should give you the clue you need to solve the problem, which brings
it back to round(). You want to round to two decimal places, but you don't put
the 2 inside the call to round. You have:
(round(5.6523), 2)
which gives you two numbers: (6.0, 2)
but what you actually want is:
round(5.6523, 2)
which gives you the number you want, 5.65.
And finally, we come all the way back to the beginning again and say That's
not the right way to do it! Don't round the number *outside* of the string
formatting, get the string formatting to do it for you:
print 'That will cost you $%.2f.' % 5.6523
will give you the result you want.
--
Steven
More information about the Tutor
mailing list