Отрицательное целочисленное деление удивительный результат

В моем заявлении я обнаружил следующее и был удивлен результатами:

8/-7=-2 (оба целых числа).

что это значит?

5 ответов

Решение

Для фактических значений, т.е. 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 - Изменение оператора деления

Python всегда делает "деление по полу" как для деления отрицательных чисел, так и для деления положительных чисел.

То есть

1/10 = 0
1/-10 = -1

Но иногда нам нужно 1/-10, чтобы быть 0

Я понял, что это можно сделать, используя сначала деление с плавающей точкой, а затем приведите результат к int, например

int(float(1)/-10) = 0

Это прекрасно работает для меня, нет необходимости импортировать будущее подразделение или обновить до Python 3

Надеюсь, это поможет вам ~

Чтобы Python автоматически конвертировал целочисленное деление в float, вы можете использовать:

from __future__ import division

сейчас:

8/-7=-1.1428571428571428

эта функция отсутствует в стандартном Python 2, чтобы не нарушать существующий код, который полагается на целочисленное деление. Тем не менее, это поведение по умолчанию для Python 3.

Когда оба значения являются целыми числами, при делении Python использует разделение по полу.

В питоне / Оператор для целочисленного деления. Вы можете посмотреть на это как на разделение поплавка с последующим floor операция.

Например,

8/7 == этаж (8.0 / 7.0) == 1

8 / -7 == этаж (8.0/-7.0) == -2

Другие вопросы по тегам