70

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

到目前为止,这是我的代码。

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'**

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

4

2 回答 2

93

似乎self.VATdecimal.Decimal类型,self.amountfloat你不能做的事情。

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

于 2013-04-19T13:18:10.597 回答
19

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

最简单的解决方案是重写任何引用以将其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)

...但这似乎更混乱。

于 2014-01-28T22:55:20.137 回答