Money data type
Phil Schmidt
phil_nospam_schmidt at yahoo.com
Thu Sep 18 13:10:00 EDT 2003
Try this:
-------------------------
import types
class USD:
"""
This class represents money in US Dollars, does math on it,
prints it, etc. All dollar amounts are stored in cents, and no
fractional cents are allowed. Rounding is supported for fractional
cent values that are passed in.
"""
def __init__(self, value=0):
"""U.S. Dollars, stored in cents."""
if isinstance(value, USD):
self.value = value.value
else:
self.value = int(round(value * 100))
def __repr__(self):
"""This is returns a string that may be exec'ed to get a duplicate."""
s = '%03i' % self.value
s = 'USD(%s.%s)' % (s[:-2], s[-2:])
return s
def __str__(self):
"""return a nice formatted printable string"""
return '$%9.2f' % (float(self.value) / 100)
def STR(self):
"""return a 'raw' formatted printable string"""
return '%0.2f' % (float(self.value) / 100)
def __add__(self, value):
"""perform self + value"""
# handle the case where value is a string
if type(value) is types.StringType:
return self.__str__() + value
# otherwise it's assumed to be a numeric type
m = USD(value)
m.value += self.value
return m
def __radd__(self, value):
"""perform value + self"""
# handle the case where value is a string
if type(value) is types.StringType:
return value + self.__str__()
# otherwise it's assumed to be a numeric type
m = USD(value)
m.value += self.value
return m
def __sub__(self, value):
"""returns a USD instance containing the difference between self and value"""
m = USD(value)
m.value = self.value - m.value
return m
def __rsub__(self, value):
"""returns a USD instance containing the difference between value and self"""
m = USD(value)
m.value -= self.value
return m
def __iadd__(self, value):
"""perform self += value"""
m = USD(value)
self.value += m.value
return self
def __isub__(self, value):
"""perform self -= value"""
m = USD(value)
self.value -= m.value
return self
def __neg__(self):
"""return negated self"""
m = USD()
m.value = -self.value
return m
def __pos__(self):
"""return self"""
m = USD()
m.value = self.value
return m
def __lt__(self, value):
"""perform self < value"""
m = USD(value)
return self.value < m.value
def __gt__(self, value):
"""perform self > value"""
m = USD(value)
return self.value > m.value
def __eq__(self, value):
"""perform self == value"""
m = USD(value)
return self.value == m.value
def __ne__(self, value):
"""perform self != value"""
m = USD(value)
return self.value != m.value
def __le__(self, value):
"""perform self < value"""
m = USD(value)
return self.value <= m.value
def __ge__(self, value):
"""perform self < value"""
m = USD(value)
return self.value >= m.value
More information about the Python-list
mailing list