2016-01-31 4 views
1

Я следующий кодОблицовочные проблема при rounidng до значения в питона

import math 

a = (4, 31) 
b = (0, 29) 
c = (1, 31) 

print(int(math.ceil(sum(a)/7))) 
print(int(math.ceil(sum(b)/7))) 
print(int(math.ceil(sum(c)/7))) 

Я получаю выход, как 5,4,4

В идеале я должен получить 5, 5, 5

Я не уверен, что происходит здесь. Если попробовать то же самое в консоли python, я получаю вывод как ожидалось (5,5,5), но в python. Если я напишу программу и запустим ее, я получу 5,4,4.

+0

Он отлично работает для меня, без каких-либо изменений. –

+4

Это зависит от python 2 vs 3. Просто выполните 'import sys; print (sys.version) 'в обеих средах. – Jasper

ответ

1

Вы делитесь на integer, если хотите разделить на float. Используйте /7. вместо /7:

import math 

a = (4, 31) 
b = (0, 29) 
c = (1, 31) 

print(int(math.ceil(sum(a)/7.))) 
print(int(math.ceil(sum(b)/7.))) 
print(int(math.ceil(sum(c)/7.))) 

Выхода

5 
5 
5 
+0

Это решает мою проблему. Большое спасибо. –

1

Добавить

import sys 
print(sys.version) 

Я предполагаю, что вы выполняете какую-то версию Python 2, когда вы запустите его как программы, но некоторая версия Python 3 "в консоли Python". /, применяемый к целым числам, ведет себя по-разному между Pythons 2 и 3.

+0

Thats хороший улов. Спасибо за подсказку :) –

1

Python 2 неявно преобразует (сокращает) ваш промежуточный результат с плавающей точкой в ​​следующее нижнее целое число. Таким образом, вы получите

sum((0,29))/7 
    => 4 

Если вы хотите иметь результат с плавающей запятой, вам нужно иметь какой-либо операнд быть поплавок:

sum((0,29))/7.0 
    => 4.1428571428571432 

Или вы накладываете один из операндов с плавающей точкой, как это :

sum((0,29))/float(7) 
    => 4.1428571428571432 

Тогда ваш код также будет работать в python2. Python3 уже использует плавающей запятой промежуточный результат, так и тот же код выглядит в р3:

sum((0,29))/7 
    => 4.1428571428571432 
    sum((0,29))/7.0 
    => 4.1428571428571432 

Для получения дополнительной информации обратитесь к этой статье: http://www.informit.com/articles/article.aspx?p=1439189

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

  • Нет связанных вопросов^_^