我只是在玩学习类函数等,所以我决定创建一个简单的函数,它应该给我的税额。
到目前为止,这是我的代码。
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'**
的操作数类型
我不明白为什么这不起作用!
答案 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)
......但这看起来更加混乱。