*不支持的操作数类型:'float'和'Decimal'

Pro*_*eus 40 python django

我只是在玩学习类函数等,所以我决定创建一个简单的函数,应该给我什么税额.

到目前为止这是我的代码.

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)
Run Code Online (Sandbox Code Playgroud)

我的问题是我收到以下错误:

不支持的操作数类型*:'float'和'Decimal'**

我不明白为什么这不起作用!

Sam*_*uns 57

它似乎self.VATdecimal.Decimal类型,self.amount是一个float你不能做的事情.

试试吧decimal.Decimal(self.amount) * self.VAT.

  • @Spike:不,`decimal.Decimal()`与`float`不是一回事.这是通过计算机处理实数的不同方法. (4认同)
  • 浮点数,小数,同样的东西?我应该用什么货币? (3认同)
  • 恰恰相反;`self.VAT = decimal.Decimal('0.095')`。 (2认同)

jym*_*bob 8

正如错误所说,你的问题是你试图将a乘以Decimalafloat

最简单的解决方案是重写任何引用以将其amount声明为Decimal对象:

self.amount = decimal.Decimal(float(amount))

并在initialize:

self.amount = decimal.Decimal('0.0')

另一种选择是在最后一行声明Decimal:

return (decimal.Decimal(float(self.amount)) * self.VAT).quantize(decimal.Decimal(float(self.amount)), rounding=decimal.ROUND_UP)

......但这看起来更加混乱.