Welcome, guest | Sign In | My Account | Store | Cart
import re
number_pattern = re.compile(r"((\A|(?<=\W))(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?)")

def deciexpr(expr):
    """Substitute Decimals for floats in an expression string.

    >>> from decimal import Decimal
    >>> s = '+21.3e-5*85-.1234/81.6'
    >>> deciexpr(s)
    "+Decimal('21.3e-5')*Decimal('85')-Decimal('.1234')/Decimal('81.6')"

    >>> eval(s)
    0.016592745098039215
    >>> eval(deciexpr(s))
    Decimal("0.01659274509803921568627450980")

    """
    return number_pattern.sub(r"Decimal('\1')", expr)

History

  • revision 5 (18 years ago)
  • previous revisions are not available