Ограничения с плавающей запятой

Мой код:

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, и вы можете прочитать ответ здесь.


Редактировать: Я только заметил, что Джон Скит уже упомянул об этом. О, хорошо...