Type(S) d'opérande non pris en charge pour*: 'float 'et'Decimal'
Je joue juste autour des fonctions d'apprentissage des classes, etc., alors j'ai décidé de créer une fonction simple qui devrait me donner le montant de l'impôt.
C'est mon code jusqu'à présent.
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)
Mon problème est que je reçois l'erreur suivante:
Type(S) d'opérande non pris en charge pour *: 'float' et 'Decimal' * *
Je ne vois pas pourquoi cela ne fonctionne pas!
2 réponses
Il semble que {[0] } soit de type decimal.Decimal
et self.amount
est une chose float
que vous ne pouvez pas faire.
Essayez decimal.Decimal(self.amount) * self.VAT
à la place.
Votre problème est, comme le dit l'erreur, que vous essayez de multiplier un Decimal
par un float
La solution la plus simple consiste à réécrire toute référence à amount
en la déclarant comme un objet décimal:
self.amount = decimal.Decimal(float(amount))
Et dans initialize
:
self.amount = decimal.Decimal('0.0')
Une autre option serait de déclarer des décimales dans votre dernière ligne:
return (decimal.Decimal(float(self.amount)) * self.VAT).quantize(decimal.Decimal(float(self.amount)), rounding=decimal.ROUND_UP)
...mais cela semble messier.