From 3de9aa40ec5fa83148616bf88dc0c09a71b9c90f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 25 Nov 2004 04:47:09 +0000 Subject: Make sure the money formatting recipe can doesn't run out of digits to the right of the decimal point. --- Doc/lib/libdecimal.tex | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Doc/lib/libdecimal.tex b/Doc/lib/libdecimal.tex index 7d461c2..7c88bc4 100644 --- a/Doc/lib/libdecimal.tex +++ b/Doc/lib/libdecimal.tex @@ -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: -- cgit v0.12