Make sure the money formatting recipe can doesn't run out of digits
authorRaymond Hettinger <python@rcn.com>
Thu, 25 Nov 2004 04:47:09 +0000 (04:47 +0000)
committerRaymond Hettinger <python@rcn.com>
Thu, 25 Nov 2004 04:47:09 +0000 (04:47 +0000)
to the right of the decimal point.

Doc/lib/libdecimal.tex

index 7d461c23ce9b48f43f87ce7630ccba045464ac37..7c88bc41751f944a3430d6fd5093404cfbaefc99 100644 (file)
@@ -979,12 +979,12 @@ def moneyfmt(value, places=2, curr='', sep=',', dp='.',
 
     places:  required number of places after the decimal point
     curr:    optional currency symbol before the sign (may be blank)
-    sep:     optional grouping separator (comma, period, or blank)
+    sep:     optional grouping separator (comma, period, space, or blank)
     dp:      decimal point indicator (comma or period)
              only specify as blank when places is zero
-    pos:     optional sign for positive numbers: "+", space or blank
-    neg:     optional sign for negative numbers: "-", "(", space or blank
-    trailneg:optional trailing minus indicator:  "-", ")", space or blank
+    pos:     optional sign for positive numbers: '+', space or blank
+    neg:     optional sign for negative numbers: '-', '(', space or blank
+    trailneg:optional trailing minus indicator:  '-', ')', space or blank
 
     >>> d = Decimal('-1234567.8901')
     >>> moneyfmt(d, curr='$')
@@ -993,19 +993,25 @@ def moneyfmt(value, places=2, curr='', sep=',', dp='.',
     '1.234.568-'
     >>> moneyfmt(d, curr='$', neg='(', trailneg=')')
     '($1,234,567.89)'
-    >>> moneyfmt(Decimal(123456))
-    '123,456.00'
-    
+    >>> moneyfmt(Decimal(123456789), sep=' ')
+    '123 456 789.00'
+    >>> moneyfmt(Decimal('-0.02'), neg='<', trailneg='>')
+    '<.02>'
+
     """
     q = Decimal((0, (1,), -places))    # 2 places --> '0.01'
     sign, digits, exp = value.quantize(q).as_tuple()
+    assert exp == -places    
     result = []
     digits = map(str, digits)
     build, next = result.append, digits.pop
     if sign:
         build(trailneg)
     for i in range(places):
-        build(next())
+        if digits:
+            build(next())
+        else:
+            build('0')
     build(dp)
     i = 0
     while digits: