monetary applications (et al)

Dan Bishop danb_83 at yahoo.com
Thu Sep 19 21:45:47 CEST 2002


terry <tg5027 at citlink.net> wrote in message news:<mailman.1032383305.18515.python-list at python.org>...
> ...
> I do admit to being OO inhibited, so maybe you could take it from this 
> short piece code and execution results, and, provide a brief 
> description of what you would put into this money class that would 
> eliminate this error message, while maintaining the code simplicity.
> [code snipped]
> ...

def _roundToEven(x):
   if x < 0:
      return -_round(-x)
   iPart, fPart = divmod(x, 1.)
   iPart = int(iPart)
   if fPart == 0.5:
      if iPart & 1:
         return iPart + 1
      else:                
         return iPart      
   elif fPart > 0.5:
      return iPart + 1
   else:
      return iPart


class Money(object):
   def __init__(self, dollars):
      self.__cents = _roundToEven(dollars * 100)
   def __repr__(self):
      return "Money(%0.2f)" % float(self)
   def __str__(self):
      return "$%0.2f" % float(self)
   def __float__(self):
      return self.__cents / 100.
   def __pos__(self):
      return self
   def __neg__(self):
      return Money(-float(self))
   def __add__(self, other):
      assert isinstance(other, Money)
      return Money(float(self) + float(other))
   def __sub__(self, other):
      assert isinstance(other, Money)
      return Money(float(self) - float(other))
   def __mul__(self, other):
      return Money(float(self) * other)
   def __div__(self, other):
      if isinstance(other, Money):
         return float(self) / float(other)
      else:
         return Money(float(self) / other)
   def __cmp__(self, other):
      return (self.__cents).__cmp__(other.__cents)
   def __hash__(self):
      return hash(float(self))



More information about the Python-list mailing list