Keith <keith.braff...@gmail.com> wrote: > Even though this uses the to_eng_string() function, and even though I > am using the decimal.Context class: > > >>> c = decimal.Context(prec=5) > >>> decimal.Decimal(1234567).to_eng_string(c) > '1234567' > > That is not an engineering notation string.
To clarify further: The spec says that the printing functions are not context sensitive, so to_eng_string does not *apply* the context. The context is only passed in for the 'capitals' value, which determines whether the exponent letter is printed in lower or upper case. This is one of the unfortunate situations where passing a context can create great confusion for the user. Another one is: >>> c = Context(prec=5) >>> Decimal(12345678, c) Decimal('12345678') Here the context is passed only for the 'flags' and 'traps' members: >>> Decimal("wrong", c) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.2/decimal.py", line 548, in __new__ "Invalid literal for Decimal: %r" % value) File "/usr/lib/python3.2/decimal.py", line 3836, in _raise_error raise error(explanation) decimal.InvalidOperation: Invalid literal for Decimal: 'wrong' >>>c.traps[InvalidOperation] = False >>> Decimal("wrong", c) Decimal('NaN') Stefan Krah -- http://mail.python.org/mailman/listinfo/python-list