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

Richard D. Moores rdmoores at gmail.com
Thu Jul 1 15:11:21 CEST 2010


On Thu, Jul 1, 2010 at 04:57, Steven D'Aprano <steve at pearwood.info> wrote:
> 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

Thanks to yours and others responses, I've learned some things I
didn't know, but remember, I'm starting with long ints such as
x = 2000000000000034, cutting it in half, and hoping to print
1000000000000017 or 1000000000000017.0
(I also need to divide odd ints like 2000000000000033 and print
1000000000000017.5)

(In my initial post, I used a smaller x, x = 2000000000000034.  I
should have made it longer, to reflect the ints I'm dealing with (big
primes and their near neighbors).

I'm still hoping to be saved from the decimal module :)  .

Dick


More information about the Tutor mailing list