Issue #27720: Fix error in eng_to_decimal docs and add examples from the specification.

(Based on a first draft patch from Evelyn Mitchell.)
This commit is contained in:
Raymond Hettinger 2016-08-13 11:15:34 -07:00
parent bd664357f1
commit f6ffa9826e
2 changed files with 36 additions and 11 deletions

View File

@ -836,11 +836,13 @@ Decimal objects
.. method:: to_eng_string(context=None) .. method:: to_eng_string(context=None)
Convert to an engineering-type string. Convert to a string, using engineering notation if an exponent is needed.
Engineering notation has an exponent which is a multiple of 3, so there Engineering notation has an exponent which is a multiple of 3. This
are up to 3 digits left of the decimal place. For example, converts can leave up to 3 digits to the left of the decimal place and may
``Decimal('123E+1')`` to ``Decimal('1.23E+3')``. require the addition of either one or two trailing zeros.
For example, this converts ``Decimal('123E+1')`` to ``Decimal('1.23E+3')``.
.. method:: to_integral(rounding=None, context=None) .. method:: to_integral(rounding=None, context=None)
@ -1410,7 +1412,11 @@ In addition to the three supplied contexts, new contexts can be created with the
.. method:: to_eng_string(x) .. method:: to_eng_string(x)
Converts a number to a string, using scientific notation. Convert to a string, using engineering notation if an exponent is needed.
Engineering notation has an exponent which is a multiple of 3. This
can leave up to 3 digits to the left of the decimal place and may
require the addition of either one or two trailing zeros.
.. method:: to_integral_exact(x) .. method:: to_integral_exact(x)

View File

@ -1068,12 +1068,11 @@ class Decimal(object):
return sign + intpart + fracpart + exp return sign + intpart + fracpart + exp
def to_eng_string(self, context=None): def to_eng_string(self, context=None):
"""Convert to engineering-type string. """Convert to a string, using engineering notation if an exponent is needed.
Engineering notation has an exponent which is a multiple of 3, so there Engineering notation has an exponent which is a multiple of 3. This
are up to 3 digits left of the decimal place. can leave up to 3 digits to the left of the decimal place and may
require the addition of either one or two trailing zeros.
Same rules for when in exponential and when as a value as in __str__.
""" """
return self.__str__(eng=True, context=context) return self.__str__(eng=True, context=context)
@ -5502,9 +5501,29 @@ class Context(object):
return r return r
def to_eng_string(self, a): def to_eng_string(self, a):
"""Converts a number to a string, using scientific notation. """Convert to a string, using engineering notation if an exponent is needed.
Engineering notation has an exponent which is a multiple of 3. This
can leave up to 3 digits to the left of the decimal place and may
require the addition of either one or two trailing zeros.
The operation is not affected by the context. The operation is not affected by the context.
>>> ExtendedContext.to_eng_string(Decimal('123E+1'))
'1.23E+3'
>>> ExtendedContext.to_eng_string(Decimal('123E+3'))
'123E+3'
>>> ExtendedContext.to_eng_string(Decimal('123E-10'))
'12.3E-9'
>>> ExtendedContext.to_eng_string(Decimal('-123E-12'))
'-123E-12'
>>> ExtendedContext.to_eng_string(Decimal('7E-7'))
'700E-9'
>>> ExtendedContext.to_eng_string(Decimal('7E+1'))
'70'
>>> ExtendedContext.to_eng_string(Decimal('0E+1'))
'0.00E+3'
""" """
a = _convert_other(a, raiseit=True) a = _convert_other(a, raiseit=True)
return a.to_eng_string(context=self) return a.to_eng_string(context=self)