0

Decimal 値を Django Max 集計クエリセットの値と比較すると何が起こっているのか混乱しています。true であると期待しているのに 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 を返します。私は明らかに本当に単純なものが欠けています。疲れた脳みその正体を教えてください。ありがとう。

4

1 に答える 1

1

詳細については、この SO ディスカッションをご覧になることをお勧めしますが、短いバージョンでは、Decimal(hr) == Decimal('25.123400000000000176214598468504846096038818359375')

必要な正確な値で Decimal を作成するには、float の文字列表現を使用する必要があります。prev_hourly_rate['hourlyRate__max'] == Decimal(repr(hr))あなたが望むものを手に入れるはずです。

于 2013-03-27T19:41:56.743 に答える