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.VATそれはdecimal.Decimalタイプself.amountのようでfloat、あなたができないことです。

decimal.Decimal(self.amount) * self.VAT代わりに試してください。

于 2013-04-19T13:18:10.597 に答える
19

あなたの問題は、エラーが言うように、 aDecimalを a で掛けようとしているということですfloat

amount最も簡単な解決策は、Decimal オブジェクトとして宣言するように参照を書き直すことです。

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

とでinitialize

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

別のオプションは、最終行で Decimals を宣言することです。

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

...しかし、それはもっと厄介なようです。

于 2014-01-28T22:55:20.137 に答える