2016-06-10 2 views
-4
def eoo(a): 
    if a%2 == 0: 
    print("Entered value is even") 
    else: 
    print("Entered value is odd") 
b = 5556.4 
print(b) 
eoo(b) 

ВыходПочему выполнение делает неправильный вывод?

5556.4 
Entered value is odd 

Может кто-нибудь объяснить?

+0

Что вы ожидали от '% 2'? – melpomene

+0

Проверьте значение '5556.4% 2', и вы увидите, что оно не равно нулю. – glibdud

+1

'5556.4% 2'' '0.4'. Такие категории, как «четный» и «нечетный», на самом деле не имеют большого значения для десятичных чисел. Из [Википедии] (https://en.wikipedia.org/wiki/Parity_ (математика)): «Формальное определение четного числа состоит в том, что оно является целым числом вида n = 2k, где k - целое число" –

ответ

0

Выход не является ошибочным. 5556.4 % 2 не равен нулю, таким образом, вы получаете в else случае:

>>> 5556.4 % 2 
0.3999999999996362 

Это ваше предположение, что любое число, которое даже не должно быть нечетным, что это неправильно. Фактически, такие категории, как «четный» и «нечетный», не имеют столь большого смысла для десятичных чисел. Из Wikipedia (курсив)

Четность представляет собой математический термин, который описывает свойство включения целого «с в одной из двух категорий: четным или нечетным. [...] Формальное определение четного числа является то, что оно является целым числом вида п = 2k, гдек является целым числом .

Вместо этого, вы можете, например, изменить способ что-то вроде этого:

def eoo(a): 
    if a % 2 == 0: 
     print("Entered value is even") 
    elif a % 2 == 1: 
     print("Entered value is odd") 
    else: 
     print("Entered value is neither even nor odd") 

Или, если вы заинтересованы только в целой части числа, используйте int(a) % 2 или round(a) % 2 проверить число, округленное до ближайшего целого, четное или нечетное.

0

a% 2 даст вам остаток, когда вы разделите его на 2. Когда вы разделите 5556.4 на 2, ваш остаток не равен 0, это .4. Вот почему вы идете в другое состояние.

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