我正在使用django 2.0和Python 3.6.4
我的模型中有两个字段total
和tax_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
还有类似内容吗?
答案 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 是为千位添加逗号分隔符。