Mumbai
Ответ должен быть 20.00, но выдаёт 20.000000000000004
Что за четвёрка в конце? Как решить эту проблему?
Хочу вас разочаровать, подобные нюансы ждут вас в компьютерном мире на каждом шагу. И питон тут не при чем. Вот как по-вашему, компьютер должен хнанить в памяти 6.35?
Давайте представим, что у нас
троичная система исчисления, то есть числа от одного до десяти мы будем записывать вот так:
0 -> 0
1 -> 1
2 -> 2
3 -> 10
4 -> 11
5 -> 12
6 -> 20
7 -> 21
8 -> 22
9 -> 30
10 -> 31
и тогда в этой системе исчисления дробь 1/3 будет записана вот так: 0.1
а в нашей привычной десятичной системе 1/3 - это бесконечная дробь 0.3333333333333…
Вернемся к вопросу, как хранить в двоичной системе компьютера числа, которые в десятичной системе записываются компактно, а в двоичной нет? Мы же ведь не можем выделить бесконечную память для хранения наших переменных, память ограничена, поэтому точность вычислений с делением всегда не абсолютная, она ограничена применяемым алготитмом. По этому поводу стоит почитать вот это
https://ru.wikipedia.org/wiki/IEEE_754-2008это сложно, но совершенно необходимо для программирования.
В вашем случае есть несколько решений:
1) во-первых, нормальная практика, когда числа с плавающей запятой сравниваются с заранее заданной точностью. То есть не так
20.00 == 20.000000000000004
а так
a = 20.0
b = 20.000000000000004
e = 0.0000001
abs(a - b) <= e
2) во-вторых, для финансовых расчетов, где важны всякие милликопейки используется
https://ru.wikipedia.org/wiki/Двоично-десятичный_кодв питоне для этого есть специальный тип Decimal.