#!/usr/bin/env python3
+# © Copyright 2021-2022, Scott Gasch
+
+"""A class to represent money. See also centcount.py"""
+
import re
from decimal import Decimal
-from typing import Optional, Tuple, TypeVar
+from typing import Optional, Tuple
import math_utils
a = round(a, 2)
s = f'{a:,.2f}'
if self.currency is not None:
- return '%s %s' % (s, self.currency)
+ return f'{s} {self.currency}'
else:
- return '$%s' % s
+ return f'${s}'
def __pos__(self):
return Money(amount=self.amount, currency=self.currency)
raise TypeError('In strict_mode only two moneys can be added')
else:
return Money(
- amount=self.amount + Decimal(float(other)), currency=self.currency
+ amount=self.amount + Decimal(float(other)),
+ currency=self.currency,
)
def __sub__(self, other):
raise TypeError('In strict_mode only two moneys can be added')
else:
return Money(
- amount=self.amount - Decimal(float(other)), currency=self.currency
+ amount=self.amount - Decimal(float(other)),
+ currency=self.currency,
)
def __mul__(self, other):
raise TypeError('can not multiply monetary quantities')
else:
return Money(
- amount=self.amount * Decimal(float(other)), currency=self.currency
+ amount=self.amount * Decimal(float(other)),
+ currency=self.currency,
)
def __truediv__(self, other):
raise TypeError('can not divide monetary quantities')
else:
return Money(
- amount=self.amount / Decimal(float(other)), currency=self.currency
+ amount=self.amount / Decimal(float(other)),
+ currency=self.currency,
)
def __float__(self):
raise TypeError('In strict_mode only two moneys can be added')
else:
return Money(
- amount=Decimal(float(other)) - self.amount, currency=self.currency
+ amount=Decimal(float(other)) - self.amount,
+ currency=self.currency,
)
__rmul__ = __mul__
def __ge__(self, other):
return self > other or self == other
- def __hash__(self):
- return self.__repr__
+ def __hash__(self) -> int:
+ return hash(self.__repr__)
AMOUNT_RE = re.compile(r"^([+|-]?)(\d+)(\.\d+)$")
CURRENCY_RE = re.compile(r"^[A-Z][A-Z][A-Z]$")