2015-10-09 13 views
-3

я попробовать этот код с питоном 2.7.9:Int() не работает должным образом

a=8.52 
for i in range(1,3): 
    a *= 10.0 
    print int (a) 

Он должен показывать

85 
852 

Но он показывает

85 
851 

У вас есть любая идея почему? Это известная ошибка?

+1

'a * 10' is' 85.19999999999999'. –

+0

@ Zach, он ничего не стоит, вы почти гарантированно никогда не найдете ошибку на этом языке, если только начинаете. В этом смысле язык очень зрелый. – TankorSmash

+2

Я понимаю закрытие этого часто задаваемого вопроса, но я думаю, что downvotes являются суровыми. OP думал, что проблема была с 'int' и, следовательно, была плохо подготовлена ​​к Google для правильных условий, которые привели бы к ответу. –

ответ

4

У вас есть идеи, почему? Это известная ошибка?

Очевидные print отладки подход дает:

a=8.52 
for i in range(1,3): 
    a *= 10.0 
    print int (a) 
print a 

, который печатает:

85 
851 
851.99999... 

Итак, что здесь происходит это с плавающей точкой математике. Это не точный, потому что нет точного способа представления 8.51 с двоичной плавающей запятой. Вместо этого значение очень очень близко (еще меньше) до 8.51 сначала сохраняется в a.

+0

Благодарим вас за ответ. Однако, если я печатаю «int (a * 100)« я получаю «852». Разве это не тот же результат? (также, если я добавлю «print a» в конце, я получаю «852» вместо «851.999 ...») – Zach

+0

Нет, это не должен быть тот же результат. –

+0

, и если вы получите 852 в конце, то ваш python 2.7.9 будет a) сломан и b) ведет себя отличным от моего python 2.7.9. –

Смежные вопросы