Подтвердить что ты не робот

Отрицательное целочисленное деление

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

from __future__ import division

Сейчас:

8/-7=-1.1428571428571428

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

Ответ 3

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

Это

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

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

Я выясню, что это можно сделать, используя сначала float-деление, а затем произведите результат в int, например.

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

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

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

Ответ 4

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

Ответ 5

В python оператор / предназначен для целочисленного деления. Вы можете посмотреть на него как на флоат-деление, за которым следует операция floor.

Например,

8/7 == floor (8.0/7.0) == 1

8/-7 == floor (8.0/-7.0) == -2