Python *的操作数类型不受支持:';浮动';和';十进制';
我只是在学习类函数等,所以我决定创建一个简单的函数,它应该给我税收 这是到目前为止我的代码Python *的操作数类型不受支持:';浮动';和';十进制';,python,django,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 in
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'**
我不明白这为什么不起作用 似乎
self.VAT
属于decimal.decimal
类型,self.amount
属于float
,是您不能做的事情
请尝试使用
decimal.decimal(self.amount)*self.VAT
。正如错误所说,您的问题是,您正在尝试将十进制
乘以浮动
最简单的解决方案是重写对amount
的任何引用,将其声明为十进制对象:
self.amount=decimal.decimal(浮动(金额))
在初始化中:
self.amount=decimal.decimal('0.0')
另一种选择是在最后一行中声明小数:
return(decimal.decimal(float(self.amount))*self.VAT)。quantize(decimal.decimal(float(self.amount)),四舍五入=十进制。四舍五入)
…但这似乎更混乱。浮点数、小数点,还是一样的?我应该用什么作为货币呢?相反self.VAT=decimal.decimal('0.095')
@Spike:No,decimal.decimal()
与float
不同。这是计算机处理实数的另一种方法。无法使用十进制将4.9转换为十进制。十进制(self.amount)和vat已经是十进制。十进制('0.095')@Spike:您是否输入了(Decimal.Decimal(self.amount)
)在quantize
调用中也可以?也许设计者试图让您思考您真正想要的:浮点或十进制(精度更精确的定义),十进制。十进制(0.77)*2十进制('1.540000000000000035527136788')很好,整数自动提升为十进制;但是>>>decimal.decimal(0.77)*0.78回溯(上次调用):文件“”,第1行,类型错误:不支持*:“decimal.decimal”和“float”的操作数类型导致崩溃。我猜如果你想要十进制结果,这会迫使你将浮点转换成十进制,如果你不关心精度,则将十进制转换成浮点。