On 04/16/2015 07:03 AM, Jim Mooney wrote:
Why does Fraction interpret a number and string so differently? They come
out the same, but it seems rather odd

from fractions import Fraction
Fraction(1.64)
Fraction(7385903388887613, 4503599627370496)
Fraction("1.64")
Fraction(41, 25)
41/25
1.64
7385903388887613 / 4503599627370496
1.64


That is because 1.64 cannot be represented exactly as a float.
Try:

>>> x = 1.64
>>> format(x,'.60f')
'1.639999999999999902300373832986224442720413208007812500000000'

If you construct a Fraction from a str OTOH, Fraction assumes you meant exactly that number.
And in fact:

>>> Fraction('1.639999999999999902300373832986224442720413208007812500000000')
Fraction(7385903388887613, 4503599627370496)


see also https://docs.python.org/3/tutorial/floatingpoint.html for an explanation of floating-point inaccuracies.


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to