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

时间:2013-04-19 13:13:26

标签: 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)

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

  

不支持的*:'float'和'Decimal'**

的操作数类型

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

2 个答案:

答案 0 :(得分:45)

似乎self.VAT属于decimal.Decimal类型而self.amount属于float,这是您无法做到的事情。

请尝试decimal.Decimal(self.amount) * self.VAT

答案 1 :(得分:7)

正如错误所述,您的问题是,您试图将Decimal乘以float

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

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)

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