Округление десятичных дробей в 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()
)

Вы должны проверить, конечно, этот код, потому что я его не пробовал.

Вернуться на верх