mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
Make sure the money formatting recipe can doesn't run out of digits
to the right of the decimal point.
This commit is contained in:
parent
7a8173a477
commit
3de9aa40ec
1 changed files with 14 additions and 8 deletions
|
@ -979,12 +979,12 @@ def moneyfmt(value, places=2, curr='', sep=',', dp='.',
|
||||||
|
|
||||||
places: required number of places after the decimal point
|
places: required number of places after the decimal point
|
||||||
curr: optional currency symbol before the sign (may be blank)
|
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)
|
dp: decimal point indicator (comma or period)
|
||||||
only specify as blank when places is zero
|
only specify as blank when places is zero
|
||||||
pos: optional sign for positive numbers: "+", space or blank
|
pos: optional sign for positive numbers: '+', space or blank
|
||||||
neg: optional sign for negative numbers: "-", "(", space or blank
|
neg: optional sign for negative numbers: '-', '(', space or blank
|
||||||
trailneg:optional trailing minus indicator: "-", ")", space or blank
|
trailneg:optional trailing minus indicator: '-', ')', space or blank
|
||||||
|
|
||||||
>>> d = Decimal('-1234567.8901')
|
>>> d = Decimal('-1234567.8901')
|
||||||
>>> moneyfmt(d, curr='$')
|
>>> moneyfmt(d, curr='$')
|
||||||
|
@ -993,19 +993,25 @@ def moneyfmt(value, places=2, curr='', sep=',', dp='.',
|
||||||
'1.234.568-'
|
'1.234.568-'
|
||||||
>>> moneyfmt(d, curr='$', neg='(', trailneg=')')
|
>>> moneyfmt(d, curr='$', neg='(', trailneg=')')
|
||||||
'($1,234,567.89)'
|
'($1,234,567.89)'
|
||||||
>>> moneyfmt(Decimal(123456))
|
>>> moneyfmt(Decimal(123456789), sep=' ')
|
||||||
'123,456.00'
|
'123 456 789.00'
|
||||||
|
>>> moneyfmt(Decimal('-0.02'), neg='<', trailneg='>')
|
||||||
|
'<.02>'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
q = Decimal((0, (1,), -places)) # 2 places --> '0.01'
|
q = Decimal((0, (1,), -places)) # 2 places --> '0.01'
|
||||||
sign, digits, exp = value.quantize(q).as_tuple()
|
sign, digits, exp = value.quantize(q).as_tuple()
|
||||||
|
assert exp == -places
|
||||||
result = []
|
result = []
|
||||||
digits = map(str, digits)
|
digits = map(str, digits)
|
||||||
build, next = result.append, digits.pop
|
build, next = result.append, digits.pop
|
||||||
if sign:
|
if sign:
|
||||||
build(trailneg)
|
build(trailneg)
|
||||||
for i in range(places):
|
for i in range(places):
|
||||||
build(next())
|
if digits:
|
||||||
|
build(next())
|
||||||
|
else:
|
||||||
|
build('0')
|
||||||
build(dp)
|
build(dp)
|
||||||
i = 0
|
i = 0
|
||||||
while digits:
|
while digits:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue