Округление десятичных дробей в Django работает не так, как ожидалось?
Я использую Django версии 3.2.16.
В Django я использую следующий код.
Например, доход__собственности равен 2500, а значение поля amount_field равно 14826. При умножении 14826 на.25 получается значение 37.715, а я хочу округлить результат до 35.72, но Django Round выдает результат 36. Как добиться желаемого результата?
amount_annotation = ExpressionWrapper(
# Use Django's Round function to round the base value to 2 decimal places
Round(
F(amount_field) * (Cast(F('income__ownership'), FloatField()) / 10000),
precision=2, # Round to 2 decimal places
output_field=FloatField()
) * 100, # Multiply the rounded value by 100
output_field=IntegerField()
)
Я бы предложил вам другой подход и вместо этого использовал встроенный в python метод round
.
В этом случае вы сможете произвести вычисления и затем получить желаемое поведение.
amount_annotation = F(amount_field) * (Cast(F('income__ownership'), FloatField()) / 10000)
rounded_value = round(amount_annotation , 2)
final_amount_annotation = ExpressionWrapper(
rounded_value * 100,
output_field=IntegerField()
)
Вы должны проверить, конечно, этот код, потому что я его не пробовал.