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

5

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

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

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

Я на питоне 3.2.

Да я согласен. Нет необходимости заставлять людей чувствовать себя плохо из-за того, что они задают вопрос о деталях реализации, которые на самом деле довольно загадочны, когда вы думаете об этом. Andrew Gorcester
@mata: просто чтобы быть уверенным Rohan
почему вы даже конвертируете результат вычитания с плавающей точкой в число с плавающей точкой? что бы вы ожидали, что это будет не плавать? mata
@duffymo: я новичок в python и никогда не ожидал этого. всегда лучше спрашивать, чем совершать глупые ошибки :) Rohan
возможный дубликатPython rounding error with float numbers recursive

Ваш Ответ

3   ответа
0

round()

например:

print(round(10 - 9.2, 2))
14

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

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

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

Вы сильно облегчили мою боль. Сначала я думал, что это ошибка, но она выглядела слишком неточно, чтобы не быть математической ошибкой, связанной с логикой типа python.
Спасибо .. искал это. Отвечает на мой вопрос Rohan
0

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

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

Похожие вопросы