Ограничения с плавающей запятой
Мой код:
a = '2.3'
Я хотел показать a
как значение с плавающей запятой.
Так как a
является строкой, я попытался:
float(a)
В результате я получил:
2.2999999999999998
Я хочу решение этой проблемы. Пожалуйста, любезно помогите мне.
Я следил за этот учебник.
Ответы
Ответ 1
Я думаю, что это больше отражает ваше понимание типов с плавающей точкой, чем на Python. См. моя статья о числах с плавающей запятой (основанная на .NET, но по-прежнему актуальная) по причинам этой "неточности". Если вам нужно сохранить точное десятичное представление, вы должны использовать десятичный модуль .
Ответ 2
Это не является недостатком python, скорее, это недостаток того, как числа с плавающей запятой хранятся на компьютере. Независимо от языка реализации, вы найдете похожие проблемы.
Вы говорите, что хотите "отобразить" A как плавающую точку, почему бы просто не отобразить строку? Визуально он будет идентичен тому, что вы ожидаете.
Как сказал Джон, если ваши потребности больше, чем просто "отображение" числа с плавающей запятой, вы должны использовать десятичный модуль для хранения точного представления.
Ответ 3
Отличные ответы, объясняющие причины. Я просто хочу добавить возможное практическое решение из стандартной библиотеки:
>>> from decimal import Decimal
>>> a = Decimal('2.3')
>>> print a
2.3
Это на самом деле (очень) F.A.Q. для Python, и вы можете прочитать ответ здесь.
Редактировать: Я только заметил, что Джон Скит уже упомянул об этом. О, хорошо...