0,01 разница в расчетах Django

Описанная ниже проблема возникла на Python3 с Django 1.9.4

В моем проекте Django для расчета скидки на продажу я использую приведенную ниже строку кода

discount = round((sale_amount - tax_amount ) * discount_rate,2)

Значения для вышеуказанных переменных следующие

sale_amount,tax_amount, discount_rate = 30.00, 6.75, 0.02000000

Значения переменных выбираются из объекта модели Django, все они одного типа, то есть десятичные.

Расчетная скидка в файле проекта Django на основе приведенных выше строк кода 0.46

Когда я рассчитываю скидку, используя вышеописанные суммы и формулу, я получаю value: 0.47 в консоли Джанго

Я не могу понять, почему существует 0.01 Разница между консолью Django и расчетом проекта.

1 ответ

Результат (30 - 6,75) * 0,02 - 0,465. Таким образом, мы ожидаем получить 0,47 при округлении. Но здесь, кажется, объяснение: round() документация.

Поведение round() для чисел с плавающей точкой может быть удивительным: например, round(2.675, 2) дает 2,67 вместо ожидаемых 2,68. Это не ошибка: это результат того факта, что большинство десятичных дробей не может быть представлено в точности как число с плавающей точкой. См. Арифметика с плавающей точкой: Проблемы и Ограничения для получения дополнительной информации.

Другие вопросы по тегам