我很困惑将Decimal值与Django Max聚合查询集的值进行比较时发生了什么。当我预期它是真的时,比较会返回false,我无法弄清楚原因。
我得到的查询集如下:
prev_hourly_rate = PayRate.objects.filter(employee__exact=emp_pk).exclude(pk=pay_rate_id).aggregate(Max('hourlyRate'))
返回
{'hourlyRate__max': Decimal('25.1234')}
我想将该Decimal值与另一个Decimal值25.1234(由变量hr表示)进行比较,但是返回False。我正在进行比较,如:
if prev_hourly_rate['hourlyRate__max'] == hr:
或
if prev_hourly_rate['hourlyRate__max'] == Decimal(hr):
甚至
if prev_hourly_rate['hourlyRate__max'] == Decimal.from_float(hr):
并且它总是返回False。我显然错过了一些非常简单的事情。请指出我疲惫的大脑是什么。感谢。
答案 0 :(得分:1)
您可能需要查看this SO discussion以获取更多信息,但简短版本是Decimal(hr) == Decimal('25.123400000000000176214598468504846096038818359375')
为了创建具有所需精确值的Decimal,您必须使用float的字符串表示。 prev_hourly_rate['hourlyRate__max'] == Decimal(repr(hr))
应该能得到你想要的东西。