summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2016-08-13 18:15:34 (GMT)
committerRaymond Hettinger <python@rcn.com>2016-08-13 18:15:34 (GMT)
commitf6ffa9826e0dbb319a1627aad004ccf3d8a30c0c (patch)
tree42a0b03df353d468cd7910c3cbd8b86994d59b01 /Lib
parentbd664357f12bb3b597607be96552c115cf8e9fc0 (diff)
downloadcpython-f6ffa9826e0dbb319a1627aad004ccf3d8a30c0c.zip
cpython-f6ffa9826e0dbb319a1627aad004ccf3d8a30c0c.tar.gz
cpython-f6ffa9826e0dbb319a1627aad004ccf3d8a30c0c.tar.bz2
Issue #27720: Fix error in eng_to_decimal docs and add examples from the specification.
(Based on a first draft patch from Evelyn Mitchell.)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/_pydecimal.py31
1 files changed, 25 insertions, 6 deletions
diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py
index c719424..900a1a7 100644
--- a/Lib/_pydecimal.py
+++ b/Lib/_pydecimal.py
@@ -1068,12 +1068,11 @@ class Decimal(object):
return sign + intpart + fracpart + exp
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
- are up to 3 digits left of the decimal place.
-
- Same rules for when in exponential and when as a value as in __str__.
+ 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.
"""
return self.__str__(eng=True, context=context)
@@ -5502,9 +5501,29 @@ class Context(object):
return r
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.
+
+ >>> 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)
return a.to_eng_string(context=self)