0,01 разница в расчетах Django - PullRequest
0 голосов
/ 03 октября 2018

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

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

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

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

sale_amount,tax_amount, discount_rate = 30.00, 6.75, 0.02000000

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

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

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

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

1 Ответ

0 голосов
/ 03 октября 2018

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

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

...