Pastebin
Paste #2099: python doc bug, decimal
< previous paste - next paste>
Pasted by tdn
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from decimal import *
>>> getcontext().prec = 2
>>> def moneyfmt(value, places=2, curr='', sep=',', dp='.',
... pos='', neg='-', trailneg=''):
... """Convert Decimal to a money formatted string.
...
... 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, 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
...
... >>> d = Decimal('-1234567.8901')
... >>> moneyfmt(d, curr='$')
... '-$1,234,567.89'
... >>> moneyfmt(d, places=0, sep='.', dp='', neg='', trailneg='-')
... '1.234.568-'
... >>> moneyfmt(d, curr='$', neg='(', trailneg=')')
... '($1,234,567.89)'
... >>> moneyfmt(Decimal(123456789), sep=' ')
... '123 456 789.00'
... >>> moneyfmt(Decimal('-0.02'), neg='<', trailneg='>')
... '<0.02>'
...
... """
... q = Decimal(10) ** -places # 2 places --> '0.01'
... sign, digits, exp = value.quantize(q).as_tuple()
... result = []
... digits = map(str, digits)
... build, next = result.append, digits.pop
... if sign:
... build(trailneg)
... for i in range(places):
... build(next() if digits else '0')
... build(dp)
... if not digits:
... build('0')
... i = 0
... while digits:
... build(next())
... i += 1
... if i == 3 and digits:
... i = 0
... build(sep)
... build(curr)
... build(neg if sign else pos)
... return ''.join(reversed(result))
...
>>> d = Decimal('-1234567.8901')
>>> moneyfmt(d, curr='$')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 28, in moneyfmt
File "/usr/lib/python2.7/decimal.py", line 2430, in quantize
'quantize result has too many digits for current context')
File "/usr/lib/python2.7/decimal.py", line 3844, in _raise_error
raise error(explanation)
decimal.InvalidOperation: quantize result has too many digits for current context
>>>
New Paste
Go to most recent paste.