0.8 * 2 = 1.6 0.6 * 2 = 1.2 0.2 * 2 = 0.4 0.4 * 2 = 0.8 ... П | Holy Python
0.8 * 2 = 1.6
0.6 * 2 = 1.2
0.2 * 2 = 0.4
0.4 * 2 = 0.8
...
Поэтому приходится записывать в дробную часть столько, сколько возможно.
После сохранения числа 0.8 в память. Мы получим, вот такой результат:
0 01111110 10011001100110011001101
А при переводе данного числа обратно мы получаем непонятное число с большим количеством нулей и цифр:
0.800000011920928955078125
Теперь вы знаете, как на самом деле хранятся дробные числа и почему 0.1 + 0.2 != 0.3 с точки зрения компьютера.
Дополнительные материалы
Функция print и интерактивная строка питона выводит только небольшое количество цифр после запятой с округлением, поэтому иногда может показаться что число хранится точно, когда на самом деле это не так.
Пример:
print(0.8) -> 0.8
print(f"{0.8:.20f}") -> 0.80000000000000004441
Когда нужны точные вычисления(например в области финансов), рекомендую использовать стандартную библиотеку decimal.
При каких-либо вычеслениях я настоятельно не рекомендую обрезать число, так как это приводит к ошибкам и потере точности.
https://docs.python.org/3/library/decimal.html
https://0.30000000000000004.com/