Вопрос

>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

Что здесь вообще происходит?Как мне преобразовать 0.47000000000000003 в строку, а результирующее значение обратно в float?

Я использую Python 2.5.4 в Windows.

Это было полезно?

Решение

str(0.47000000000000003) дать '0.47' и float('0.47') может быть 0.46999999999999997.Это связано со способом представления чисел с плавающей запятой (см. Это википедия статья)

Примечание: float(repr(0.47000000000000003)) или eval(repr(0.47000000000000003)) даст вам ожидаемый результат, но вы должны использовать Десятичная дробь если вам нужна точность.

Другие советы

float (и double) не обладают бесконечной точностью.Естественно, при работе с ними возникают ошибки округления.

Это такой Вопросы и ОТВЕТЫ по Python

Возникает тот же вопрос довольно регулярно в comp.lang.python также.

Я думаю, причина, по которой это часто задаваемые вопросы, заключается в том, что, поскольку python совершенен во всех других отношениях ;-), мы ожидаем, что он будет выполнять арифметику идеально - точно так, как нас учили в школе.Однако, как скажет вам любой, кто прошел курс числовых методов, числа с плавающей запятой очень далеки от совершенства.

Десятичная дробь это хорошая альтернатива, и если вы хотите больше скорости и больше возможностей неуклюжий это тоже здорово.

на этом примере Я думаю, что это ошибка в Python при разделении

    >>> print(int(((48/5.0)-9)*5))
    2

самый простой способ, я решаю эту проблему следующим образом

    >>> print(int(round(((48/5.0)-9)*5,2)))
    3
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top