[Python-checkins] python/nondist/sandbox/decimal money.py,NONE,1.1
facundobatista at users.sourceforge.net
facundobatista at users.sourceforge.net
Wed Jun 30 20:04:39 EDT 2004
Update of /cvsroot/python/python/nondist/sandbox/decimal
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25435
Added Files:
money.py
Log Message:
Draft of Money class.
--- NEW FILE: money.py ---
import Decimal
Decimal.SetDefaultContext(Decimal.BASIC_DEFAULT_CONTEXT)
context = Decimal.getcontext()
context.prec = 20
context.rounding = Decimal.ROUND_HALF_UP
# styles for currency simbol
OUTSIDE = 'outside' # $-15.36 or $(15.36)
INSIDE = 'inside' # -$15.36 or ($15.36)
# styles for minus sign
DASH = 'dash' # $-15.36 or -$15.36
PARENTHESES = 'parentheses' # $(15.36) or ($15.36)
class Money(Decimal.Decimal):
'''Money class'''
decimalSeparator = '.'
thousandSeparator = ''
currencySymbol = '$'
decimal_positions = 2
currSymbolStyle = OUTSIDE
minusStyle = DASH
def __init__(self, value=0):
Decimal.Decimal.__init__(self, value)
self.quantdec = Decimal.Decimal('1e-'+str(self.decimal_positions))
def __str__(self):
(sign, number, exp) = self.quantize(self.quantdec).as_tuple()
numbint = number[:exp]
numbdec = number[exp:]
# convert to list and reverse
nint = list(numbint)
nint.reverse()
parts_lrev = [nint[x:x+3] for x in range(0, len(nint), 3)]
parts_lrev.reverse()
# reverse each chunk
parts_str = []
for part in parts_lrev:
part.reverse()
parts_str.append(''.join(map(str, part)))
# parts of the final string
cSS = self.currSymbolStyle
mS = self.minusStyle
if sign:
if cSS == OUTSIDE and mS == DASH:
fstr = [self.currencySymbol, '-']
elif cSS == INSIDE and mS == DASH:
fstr = ['-', self.currencySymbol]
elif cSS == OUTSIDE and mS == PARENTHESES:
fstr = [self.currencySymbol, '(']
elif cSS == INSIDE and mS == PARENTHESES:
fstr = ['(', self.currencySymbol]
else:
raise ValueError, "Bad value for minus or currency symbol styles!"
else:
fstr = [self.currencySymbol]
fstr.append(self.thousandSeparator.join(parts_str))
fstr.append(self.decimalSeparator)
fstr.extend(map(str, numbdec))
if sign and mS == PARENTHESES:
fstr.append(')')
return ''.join(fstr)
def __repr__(self):
return "Money('%s')" % Decimal.Decimal.__str__(self)
More information about the Python-checkins
mailing list