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”的操作数类型导致崩溃。我猜如果你想要十进制结果,这会迫使你将浮点转换成十进制,如果你不关心精度,则将十进制转换成浮点。