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. Это не ошибка: это результат того факта, что большинство десятичных дробей не может быть представлено в точности как число с плавающей точкой. См. Арифметика с плавающей точкой: Проблемы и Ограничения для получения дополнительной информации.