如何在Django中乘以浮点数和小数?

时间:2018-02-24 07:25:54

标签: python django

我正在使用django 2.0和Python 3.6.4

我的模型中有两个字段totaltax_total,它们都是十进制字段。

total       = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
tax_total   = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)

我想在函数中将它乘以1.15之后计算该值。

def pre_save_cart_receiver(sender, instance, *args, **kwargs):
    new_tax_total      = instance.total * Decimal(1.15)
    instance.tax_total = format(new_tax_total, '.2f') 

pre_save.connect(pre_save_cart_receiver, sender=Cart)

它给了我错误:     不支持的操作数类型*:' float'和'十进制'

当我想添加两位小数时,我会这样做:

    new_total           = math.fsum([cart_total,  shipping_total])
    new_total_formatted = format(new_total, '.2f')

math还有类似内容吗?

3 个答案:

答案 0 :(得分:3)

试试这个

new_tax_total      = float(instance.total) * 1.15

如果您需要对结果进行舍入,请使用round()
new_tax_total = round(float(instance.total) * 1.15,2)其中2是四舍五入的整数

答案 1 :(得分:2)

对于初学者和不相关的人,除非你想要对所谓“税”的东西进行不必要的精确度,否则我会将你的税收归入一个字符串。

from decimal import Decimal
Decimal(3.16)
=> Decimal('3.160000000000000142108547152020037174224853515625')
Decimal('3.16')
=> Decimal('3.16')
Decimal('3.16') * Decimal(2)
=> Decimal('6.32')
Decimal(3.16) * Decimal(2)
=> Decimal('6.320000000000000284217094304')
Decimal(3.16) * Decimal(2.5434)
=> Decimal('8.037144000000000693745505487')
Decimal('3.16') * Decimal('2.5434')
=> Decimal('8.037144')

至于为什么它认为你有DecimalField的浮动,我不知道。所以这是一个部分答案,抱歉。

答案 2 :(得分:1)

有点晚了,但如果有人正在寻找解决方案,我使用了这个,在 custom_tags.py 中添加了一个方法

def multiply_unversal(item1, item2):
    return float(item1) * float(item2)

然后在视图中我调用 {{ data.est_number_of_shares |内逗号}}。注意这里的 intcomma 是为千位添加逗号分隔符。