[Julian Hernandez Gomez] > This is maybe a silly question, but... > > is there a "easy way" to make eval() convert all floating > numbers to Decimal objects and return a Decimal?
from decimal import Decimal import re number = re.compile(r"((\b|(?=\W))(\d+(\.\d*)?|\.\d+)([eE][+-]?\d{1,3})?)") deciexpr = lambda s: number.sub(r"Decimal('\1')", s) for s in ('1.00000001+0.1111111', '+21.3e-5*85-.1234/81.6', '1.0/7'): print '%s\n --> %r' % (s, eval(s)) s = deciexpr(s) print '%s\n --> %r\n' % (s, eval(s)) """ 1.00000001+0.1111111 --> 1.11111111 Decimal('1.00000001')+Decimal('0.1111111') --> Decimal("1.11111111") +21.3e-5*85-.1234/81.6 --> 0.016592745098039215 +Decimal('21.3e-5')*Decimal('85')-Decimal('.1234')/Decimal('81.6') --> Decimal("0.01659274509803921568627450980") 1.0/7 --> 0.14285714285714285 Decimal('1.0')/Decimal('7') --> Decimal("0.1428571428571428571428571429") """ Raymond Hettinger -- http://mail.python.org/mailman/listinfo/python-list