Неожиданное округление чисел с плавающей точкой в Python может происходить из-за перевода десятичных дробей в двоичную систему в памяти компьютера. 5 Получающееся двоичное число может недостаточно точно представлять исходное число с основанием 10. 1 Например, когда в интерпретатор Python вводится число 0.1, оно сохраняется в памяти как число с плавающей точкой и преобразуется. 1 0.1 — это десятичное число с основанием 10, но числа с плавающей точкой хранятся в двоичной записи. 1 То есть основание 0.1 преобразуется из 10 в 2. 1 Получающееся двоичное число может быть бесконечно повторяющимся десятичным числом, записанным с основанием 2. 1 Память компьютера конечна, поэтому бесконечно повторяющееся представление двоичной дроби 0.1 округляется до конечной дроби. 1
Ещё несколько причин, по которым число округляется при его представлении в виде числа с плавающей точкой: 1
Чтобы получать более предсказуемый результат, можно использовать модуль Decimal. 5