Подтвердить что ты не робот

Неподдерживаемый тип операндов для *: 'float' и 'Decimal'

Я просто играю вокруг функций классов обучения и т.д. Поэтому я решил создать простую функцию, которая должна дать мне сумму налога.

это мой код до сих пор...

 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'

Я не понимаю, почему это не должно работать!

4b9b3361

Ответ 1

Кажется, что self.VAT имеет тип decimal.Decimal и self.amount - это float, вещь, которую вы не можете сделать.

Попробуйте decimal.Decimal(self.amount) * self.VAT.

Ответ 2

Ваша проблема в том, что, как говорится в ошибке, вы пытаетесь умножить 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)

... но это кажется более беспорядочным.