Ответ 1
Кажется, что self.VAT
имеет тип decimal.Decimal
и self.amount
- это float
, вещь, которую вы не можете сделать.
Попробуйте decimal.Decimal(self.amount) * self.VAT
.
Я просто играю вокруг функций классов обучения и т.д. Поэтому я решил создать простую функцию, которая должна дать мне сумму налога.
это мой код до сих пор...
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)
Моя проблема: я получаю следующую ошибку:
неподдерживаемый тип операндов для *: 'float' и 'Decimal'
Я не понимаю, почему это не должно работать!
Кажется, что self.VAT
имеет тип decimal.Decimal
и self.amount
- это float
, вещь, которую вы не можете сделать.
Попробуйте decimal.Decimal(self.amount) * self.VAT
.
Ваша проблема в том, что, как говорится в ошибке, вы пытаетесь умножить Decimal
на float
Простейшим решением является переписать любую ссылку на amount
, объявив ее как десятичный объект:
self.amount = decimal.Decimal(float(amount))
и initialize
:
self.amount = decimal.Decimal('0.0')
Другой вариант - объявить десятичные разряды в вашей последней строке:
return (decimal.Decimal(float(self.amount)) * self.VAT).quantize(decimal.Decimal(float(self.amount)), rounding=decimal.ROUND_UP)
... но это кажется более беспорядочным.