Dick Moores wrote:
> 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))) -
This looks backwards ^^^^^^^^^^
Don't you need D(str(num)) ? Then converting it back to a str before you
call abs will not work.
Your old approach of
def D(num):
return Decimal(str(num))
would probably make for more readable code and fewer errors.
I'm not sure this approach will work, though, if you are trying to get
higher precision, I would think you would have to do all the
calculations in Decimal, not going to floats for num. I admit I haven't
thought it through, though. I think you can use Decimal.quantize()
instead of round().
HTH
Kent
> 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
>
> _______________________________________________
> Tutor maillist - [email protected]
> http://mail.python.org/mailman/listinfo/tutor
>
>
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor