[Python-Dev] Decimal <-> float comparisons in py3k.

Raymond Hettinger raymond.hettinger at gmail.com
Wed Mar 17 22:58:25 CET 2010


On Mar 17, 2010, at 1:59 PM, Steven D'Aprano wrote:

> On Thu, 18 Mar 2010 07:44:21 am Raymond Hettinger wrote:
>> The spectrum of options from worst to best is
>> 1) compare but give the wrong answer
>> 2) compare but give the right answer
>> 3) refuse to compare.
> 
> Why is 3 the best? If there is a right answer to give, surely giving the 
> right answer it is better than not?

From the early days of the decimal module,
we've thought that mixed float-decimal operations
are 1) a bit perilous and 2) have few, if any good
use cases.     

Accordingly, any mixed operations should be explicit 
rather than implicit:

     Decimal('1.1') + Decimal.from_float(2.2)

is better than:

     Decimal('1.1') + 2.2

To help the user avoid confusion, we flag the latter with a TypeError:
unsupported operand type(s) for +: 'Decimal' and 'float'.

Unfortunately, in Py2.x, implicit mixed comparisons do not
raise an exception, and instead will silently fail by giving 
an incorrect answer: 

    >>> Decimal('1.1') < 2.2
    False

IMO, raising the exception is the right thing to do.
Short of that though, if we're going to give a result,
it should at least be a correct one.


Raymond


New zen:

* right answers are better wrong
* but ill-formed questions are best not answered at all


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20100317/48095c0b/attachment-0001.html>


More information about the Python-Dev mailing list