I'm just playing around learning classes functions etc, So I decided to create a simple function what should give me tax amount.
this is my code so far.
class VAT_calculator: """ A set of methods for VAT calculations. """ def __init__(self, amount=None): self.amount = amount self.VAT = decimal.Decimal('0.095') def initialize(self): self.amount = 0 def total_with_VAT(self): """ Returns amount with VAT added. """ if not self.amount: msg = u"Cannot add VAT if no amount is passed!'" raise ValidationError(msg) return (self.amount * self.VAT).quantize(self.amount, rounding=decimal.ROUND_UP)
My issue is I'm getting the following error:
unsupported operand type(s) for *: 'float' and 'Decimal'**
I don't see why this should not work!
It seems like
self.VAT is of
decimal.Decimal type and
self.amount is a
float, thing that you can't do.
decimal.Decimal(self.amount) * self.VAT instead.
Your issue is, as the error says, that you're trying to multiply a
Decimal by a
The simplest solution is to rewrite any reference to
amount declaring it as a Decimal object:
self.amount = decimal.Decimal(float(amount))
self.amount = decimal.Decimal('0.0')
Another option would be to declare Decimals in your final line:
return (decimal.Decimal(float(self.amount)) * self.VAT).quantize(decimal.Decimal(float(self.amount)), rounding=decimal.ROUND_UP)
...but that seems messier.