Python 2.7 issue with decimal value 0.0

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Python 2.7 issue with decimal value 0.0

Larry Martell
I have an app that works with 2.6, but in 2.7 it is failing. I traced
it down to an issue with decimal.Decimal being passed a value of 0.0.
It 2.6 this is fine, but in 2.7 it throws an exception:

TypeError: Cannot convert float to Decimal.  First convert the float to a string

This is easy enough to deal with, but I find it odd. Is this a known issue?


Reply | Threaded
Open this post in threaded view
|

Python 2.7 issue with decimal value 0.0

Oscar Benjamin-2
On 25 March 2015 at 14:20, Larry Martell <larry.martell at gmail.com> wrote:
> I have an app that works with 2.6, but in 2.7 it is failing. I traced
> it down to an issue with decimal.Decimal being passed a value of 0.0.
> It 2.6 this is fine, but in 2.7 it throws an exception:
>
> TypeError: Cannot convert float to Decimal.  First convert the float to a string
>
> This is easy enough to deal with, but I find it odd. Is this a known issue?

Perhaps I've misunderstood but decimal.Decimal(0.0) works fine here:

$ python2.7
Python 2.7.3 (default, Dec 18 2014, 19:10:20)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import decimal
>>> decimal.Decimal(0.0)
Decimal('0')


Oscar


Reply | Threaded
Open this post in threaded view
|

Python 2.7 issue with decimal value 0.0

Tim Golden-4
On 25/03/2015 14:29, Oscar Benjamin wrote:

> On 25 March 2015 at 14:20, Larry Martell <larry.martell at gmail.com> wrote:
>> I have an app that works with 2.6, but in 2.7 it is failing. I traced
>> it down to an issue with decimal.Decimal being passed a value of 0.0.
>> It 2.6 this is fine, but in 2.7 it throws an exception:
>>
>> TypeError: Cannot convert float to Decimal.  First convert the float to a string
>>
>> This is easy enough to deal with, but I find it odd. Is this a known issue?
>
> Perhaps I've misunderstood but decimal.Decimal(0.0) works fine here:
>
> $ python2.7
> Python 2.7.3 (default, Dec 18 2014, 19:10:20)
> [GCC 4.6.3] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import decimal
>>>> decimal.Decimal(0.0)
> Decimal('0')

I suspect the OP is confusing himself a little: the ability to create a
Decimal object directly from a float/int was added in 2.7. In 2.6 you
have to create it from a string (and if you don't you get the very error
message he posts above).

<dump>
ActivePython 2.6.6.18 (ActiveState Software Inc.) based on
Python 2.6.6 (r266:84292, Jan  7 2011, 13:16:36) [MSC v.1500 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import decimal
>>> decimal.Decimal(0.0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\python26\lib\decimal.py", line 649, in __new__
    "First convert the float to a string")
TypeError: Cannot convert float to Decimal.  First convert the float to
a string
>>>


</dump>


TJG