[Tutor] Need help with rewriting script to use Decimal module

Dick Moores rdm at rcblue.com
Tue Jan 2 19:18:49 CET 2007


from decimal import Decimal as D

def bestFracForMinimumError(decimal, minimumError):
     denom = 0
     while True:
         denom += 1
         num = round(D(str(decimal)) * D(str(denom)))
         error = abs(str((str(D(num) / D(str(denom))) - 
D(str(decimal))) / str(D(str(decimal)) * d("100"))))
         if error <= D(minimumError):
             break
     return int(num), D(denom), error

dec = D(".34576598876876867756765765")

me = D(".0001")

print bestFracForMinimumError(dec, me)


Traceback (most recent call last):
   File "fracSimple2-c.py", line 17, in <module>
     print bestFracForMinimumError(dec, me)
   File "fracSimple2-c.py", line 8, in bestFracForMinimumError
     error = abs(str((str(D(num) / D(str(denom))) - D(str(decimal))) 
/ str(D(str(
decimal)) * d("100"))))
   File "E:\Python25\lib\decimal.py", line 578, in __new__
     "First convert the float to a string")
TypeError: Cannot convert float to Decimal.  First convert the float 
to a string

I don't understand this TypeError. Seems to me that I've converted 
EVERYTHING in that line 8 to a string.

Dick



More information about the Tutor mailing list