В моем приложении я столкнулся со следующим и был удивлен результатами:
8/-7=-2
(оба числа).
что это значит?
В моем приложении я столкнулся со следующим и был удивлен результатами:
8/-7=-2
(оба числа).
что это значит?
Для фактических значений, то есть 8.0/(-7.0)
, результат примерно равен -1.143
.
Ваш результат с использованием целочисленного деления округляется в меньшую сторону в сторону более отрицательного значения -2
. (Это также известно как «этажное деление»)
Вот почему вы получите несколько озадачивающие ответы:
>>> 8/(-7)
-2
>>> 8/7
1
Примечание. Это «исправлено» в Python 3, где результатом 8/(-7)
будет -1.143
. Поэтому, если у вас нет причин использовать Python 2, вам следует обновиться. ;)
В Python 3, если вы все еще хотите целочисленное деление, вы можете использовать оператор //
. Это даст вам тот же ответ, что и 8/(-7)
в Python 2.
Вот предложение по улучшению Python на эту тему: PEP 238 -- Изменение оператора подразделения
-5 // 2 == -2
и -5 % 2 == -1
. Другими словами, мы все еще должны вам эму в следующий раз.
- person intuited; 07.04.2011
-5 % 2 == 5 % 2
, поскольку они находятся в одном классе эквивалентности?
- person Neil G; 07.04.2011
Python всегда выполняет «деление пола» как для деления отрицательных чисел, так и для деления положительных чисел.
То есть
1/10 = 0
1/-10 = -1
Но иногда нам нужно, чтобы 1/-10 было 0
Я понимаю, что это можно сделать, сначала используя деление с плавающей запятой, а затем приведя результат к int, например.
int(float(1)/-10) = 0
Это отлично работает для меня, нет необходимости импортировать будущее подразделение или обновляться до Python 3.
Надеюсь, это поможет вам~
чтобы python автоматически преобразовывал целочисленное деление в число с плавающей запятой, вы можете использовать:
from __future__ import division
Теперь:
8/-7=-1.1428571428571428
эта функция отсутствует в стандартном Python 2, чтобы не нарушать существующий код, основанный на целочисленном делении. Однако это поведение по умолчанию для Python 3.
Когда оба значения являются целыми числами, при делении Python использует деление по полу.
В python оператор /
предназначен для целочисленного деления. Вы можете рассматривать это как деление с плавающей запятой, за которым следует операция floor
.
Например,
8/7 == этаж(8.0/7.0) == 1
8/-7 == пол(8,0/-7,0) == -2