[Python-Dev] "Decimal(2) != float(2)"???

Steven D'Aprano steve at pearwood.info
Sun Sep 30 05:48:07 CEST 2012

On 30/09/12 10:43, Jan Kaliszewski wrote:
> Hello,
> In http://docs.python.org/release/3.2.3/reference/expressions.html#in we
>read: "[...] This can create the illusion of non-transitivity between
>supported cross-type comparisons and unsupported comparisons. For example,
>Decimal(2) == 2 and 2 == float(2) but Decimal(2) != float(2)."
> Is it a bug in the docs or in Python itself? (I checked that in 3.2, but it may be true for 3.3 as well)

Documentation bug. It used to be the case that Decimal and float did not compare equal:

steve at runes:~$ python3.1
Python 3.1.3 (r313:86834, Nov 28 2010, 11:28:10)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
py> from decimal import Decimal
py> Decimal(2) == 2.0

but starting in 3.2 they do. But of course there are traps for the unwary,
due to binary floats, e.g. Decimal("0.1") != 0.1


More information about the Python-Dev mailing list