Django:n个小数字段returns的乘法结果与n * 2个小数位
Django: Multiplication of n Decimal Fields returns result with n*2 decimal places
我正在使用 django,我有这个模型:
class CartLine(DeletableModel):
product = models.ForeignKey('Product', related_name='cart_lines', on_delete=do_nothing)
cart = models.ForeignKey('Cart', related_name='lines', on_delete=do_nothing)
quantity = models.DecimalField(max_digits=10, decimal_places=2, verbose_name=_('Quantity'))
@property
def total_sum(self):
return self.product.price * self.quantity
class Meta:
verbose_name = _('Cart Line')
verbose_name_plural = _('Cart Lines')
当我在 {{ line.product.price }}
这样的模板中使用 属性 total_sum 时,它 return 结果 300.0000
。即使当我尝试使用像 {{ line.product.price|floatformat:2 }}
这样的过滤器标签 floatformat 时,它 return 编辑了相同的值,但它没有格式化它。
所以我去 python shell 试了一下,它 return 得到了相同的值:
>>> cartline.total_sum
Decimal('300.0000')
当我将 属性 更改为:
@property
def total_sum(self):
return self.product.price * self.quantity * self.quantity
并在控制台中进行了测试:
cartline.total_sum
Decimal('900.000000')
这就像连接小数位...当我进行乘法或任何其他运算时,如何解决或解决这个问题以将显示限制为 2 位小数?
您可以使用 round()
函数使 total_sum
显示您想要的精确小数位。
像这样:
@property
def total_sum(self):
return round(Decimal(self.product.price * self.quantity), 2)
schwobaseggl 评论通过尝试 total_sum.quantize(Decimal("0.01"))
解决了我的问题
我正在使用 django,我有这个模型:
class CartLine(DeletableModel):
product = models.ForeignKey('Product', related_name='cart_lines', on_delete=do_nothing)
cart = models.ForeignKey('Cart', related_name='lines', on_delete=do_nothing)
quantity = models.DecimalField(max_digits=10, decimal_places=2, verbose_name=_('Quantity'))
@property
def total_sum(self):
return self.product.price * self.quantity
class Meta:
verbose_name = _('Cart Line')
verbose_name_plural = _('Cart Lines')
当我在 {{ line.product.price }}
这样的模板中使用 属性 total_sum 时,它 return 结果 300.0000
。即使当我尝试使用像 {{ line.product.price|floatformat:2 }}
这样的过滤器标签 floatformat 时,它 return 编辑了相同的值,但它没有格式化它。
所以我去 python shell 试了一下,它 return 得到了相同的值:
>>> cartline.total_sum
Decimal('300.0000')
当我将 属性 更改为:
@property
def total_sum(self):
return self.product.price * self.quantity * self.quantity
并在控制台中进行了测试:
cartline.total_sum
Decimal('900.000000')
这就像连接小数位...当我进行乘法或任何其他运算时,如何解决或解决这个问题以将显示限制为 2 位小数?
您可以使用 round()
函数使 total_sum
显示您想要的精确小数位。
像这样:
@property
def total_sum(self):
return round(Decimal(self.product.price * self.quantity), 2)
schwobaseggl 评论通过尝试 total_sum.quantize(Decimal("0.01"))