Почему тебя это волнует? (Это серьезный вопрос.)
Ответ, который вы получаете, настолько близок к 4.123
, что не имеет значения. Это не может быть точно 4.123
, так как существует только конечное число чисел (около 2**64
на типичной машине), которые Python может представлять точно, и не вдаваясь в подробности о представлениях с плавающей точкой, просто так получается, что 4.123
не является одним из тех чисел. Кстати, 4.1230000000000002
тоже не одно из чисел, которое может быть точно представлено; сохраненное действительное число - 4.12300000000000022026824808563105762004852294921875
, но Python укорачивает десятичное представление до 17 значащих цифр для отображения. Итак:
- Если вы занимаетесь математикой с результатом, тогда разница между
4.123
и тем, что вы получаете, настолько мала, что не имеет никакого значения. Только не беспокойся об этом.
- Если вы просто заботитесь о том, чтобы вывод был красивым (то есть, то, что вам нужно, это строка, а не число), тогда используйте
str
или форматирование строки.
- В маловероятном случае, когда разница действительно имеет значение, например, потому что вы выполняете финансовую работу, и это влияет на направление, в котором что-то округляется позже, используйте модуль
decimal
.
Последнее замечание: в Python 3.x и Python 2.7 repr
для float изменилось, так что вы получите 4.123
, как вы ожидаете здесь.