[Tutor] puzzled by Python 3's print()

Steven D'Aprano steve at pearwood.info
Thu Jul 1 13:57:15 CEST 2010


On Thu, 1 Jul 2010 06:26:21 pm Richard D. Moores wrote:
> >>> x = 2000000000000034
> >>> x/2
> 1000000000000017.0
>
> >>> print(x/2)
> 1e+15
>
> I was expecting, in fact needing, 1000000000000000017 or
> 1000000000000000017.0
>
> 1e+15 is unsatisfactory. Am I forced to use the decimal module?

This is not an issue with print, this is an issue with floats -- they 
produced a rounded, approximate value when converted to a string. print 
merely prints that string:

>>> x = 1e15 +17
>>> x
1000000000000017.0
>>> print(x)
1e+15
>>> str(x)
'1e+15'


If you want more control over the string conversion, you can do 
something like this:

>>> print(repr(x))
1000000000000017.0
>>> print('%.5f' % x)
1000000000000017.00000


-- 
Steven D'Aprano


More information about the Tutor mailing list