Commit b3833dde authored by Raymond Hettinger's avatar Raymond Hettinger

Simplify one of the decimal recipes.

parent fd6032d4
...@@ -1880,13 +1880,13 @@ suggest, so we trap :const:`Inexact` to signal a need for more precision: ...@@ -1880,13 +1880,13 @@ suggest, so we trap :const:`Inexact` to signal a need for more precision:
def float_to_decimal(f): def float_to_decimal(f):
"Convert a floating point number to a Decimal with no loss of information" "Convert a floating point number to a Decimal with no loss of information"
n, d = f.as_integer_ratio() n, d = f.as_integer_ratio()
with localcontext() as ctx: numerator, denominator = Decimal(n), Decimal(d)
ctx.traps[Inexact] = True ctx = Context(prec=60)
while True: result = ctx.divide(numerator, denominator)
try: while ctx.flags[Inexact]:
return Decimal(n) / Decimal(d) ctx.prec *= 2
except Inexact: result = ctx.divide(numerator, denominator)
ctx.prec += 1 return result
.. doctest:: .. doctest::
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment