[Python-Dev] Decimal <-> float comparisons in py3k.
Mark Dickinson
dickinsm at gmail.com
Tue Mar 16 17:11:38 CET 2010
On Tue, Mar 16, 2010 at 3:58 PM, P.J. Eby <pje at telecommunity.com> wrote:
> At 09:58 AM 3/16/2010 -0500, Facundo Batista wrote:
>>
>> I'm +0 to allow these comparisons, being "Decimal(1) < .3" the same as
>> "Decimal(1) < Decimal.from_float(.3)"
>
> Does Decimal.from_float() use the "shortest decimal representation"
> approach?
No. It does exact conversions:
>>> Decimal.from_float(1.1)
Decimal('1.100000000000000088817841970012523233890533447265625')
>>> Decimal.from_float(1.1) == 1.1
False
>>> Decimal('1.1') == float('1.1') # returns False both pre- and post-patch
False
> If not, it might be confusing if a number that prints as '.1' compares
> unequal to Decimal('.1').
Agreed, but this is just your everyday floating-point confusion, to be
dealt with by social means (e.g., educating the programmer). Any
technical solution that made "Decimal('1.1') == float('1.1')" evaluate
to True would, I suspect, be a cure worse than the original disease.
Mark
More information about the Python-Dev
mailing list