Incorrect Decimal-Float behaviour in comparison tests
steve at holdenweb.com
Fri Mar 3 17:39:56 CET 2006
Cassiano, Marco wrote:
> I have difficulties with a weird Python 2.4.2 behaviour in comparing Decimal to Floats.
> For Example :
>>>>from decimal import Decimal
>>>>if a > b :print a,b,'a is greater than b - NOT TRUE!!!!'
> ... else: print a,b,'b is greater than a - CORRECT'
> 3.7 6.3 a is greater than b - NOT TRUE!!!!
> Have you ever encountered this behaviour ? It seems a bug to me...
> Do you konw if there is any patch available for this?
>>> if a > Decimal(str(b)):
... print "oh oh!"
... print "This looks better"
This looks better
Decimals and floats aren't meant to be directly compared. You can't
even convert a float directly into a Decimal:
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/decimal.py", line 534, in __new__
raise TypeError("Cannot convert float to Decimal. " +
TypeError: Cannot convert float to Decimal. First convert the float to
So what you are seeing is the result of a comparison based on types: you
will probably find that all floats compare less than all Decimals.
The correct thing to do is apply the float() function to Decimals before
comparing them with other floats:
>>> if float(a) > float(b):
... print "a > b"
... print "b > a"
b > a
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC/Ltd www.holdenweb.com
Love me, love my blog holdenweb.blogspot.com
More information about the Python-list