с плавающей точкой в Python дает неправильный ответ

Я рассчитал следующее:

<code>>>> float(10.0-9.2)
0.800000000000000*7*
</code>

даже выполнение 10.0-9.2 дало вышеуказанный результат. Почему в результате появятся дополнительные 7?

Я на питоне 3.2.

 Rohan02 мая 2012 г., 06:46
@duffymo: я новичок в python и никогда не ожидал этого. всегда лучше спрашивать, чем совершать глупые ошибки :)
 Andrew Gorcester02 мая 2012 г., 19:50
Да я согласен. Нет необходимости заставлять людей чувствовать себя плохо из-за того, что они задают вопрос о деталях реализации, которые на самом деле довольно загадочны, когда вы думаете об этом.
 Rohan02 мая 2012 г., 06:45
@mata: просто чтобы быть уверенным
 mata01 мая 2012 г., 23:09
почему вы даже конвертируете результат вычитания с плавающей точкой в число с плавающей точкой? что бы вы ожидали, что это будет не плавать?
 recursive01 мая 2012 г., 22:00
возможный дубликатPython rounding error with float numbers

Ответы на вопрос(3)

round()

например:

print(round(10 - 9.2, 2))
Решение Вопроса

поскольку она основана на двоичном приближении чисел.

Естьхорошее объяснение этого в документах Python.

Вы можете проверитьdecimal module если вам нужны более точные ответы.

 Rohan01 мая 2012 г., 21:56
Спасибо .. искал это. Отвечает на мой вопрос
 26 июн. 2017 г., 10:14
Вы сильно облегчили мою боль. Сначала я думал, что это ошибка, но она выглядела слишком неточно, чтобы не быть математической ошибкой, связанной с логикой типа python.

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

 01 мая 2012 г., 21:58
Да, они просто не "двоичные" числа с плавающей точкой.
 01 мая 2012 г., 21:57
Конечно,decimal также реализованы числа с плавающей запятой, просто с другой базой - это означает, что вы по-прежнему получаете неточности, только те, к которым привыкли люди.

Ваш ответ на вопрос