В моем приложении я столкнулся с следующим и был удивлен результатами:
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 - Изменение оператора отдела
чтобы python автоматически преобразовывал целочисленное деление на float, вы можете использовать:
from __future__ import division
Сейчас:
8/-7=-1.1428571428571428
эта функция не находится в стандартном python 2, чтобы не сломать существующий код, основанный на делении целого числа. Однако это поведение по умолчанию для python 3.
Python всегда выполняет "разделение полов" для деления отрицательных чисел и деления положительных чисел.
Это
1/10 = 0
1/-10 = -1
Но когда-то нам нужно 1/-10 быть 0
Я выясню, что это можно сделать, используя сначала float-деление, а затем произведите результат в int, например.
int(float(1)/-10) = 0
Это отлично работает для меня, нет необходимости импортировать будущее подразделение или обновить до Python 3
Надеюсь, это поможет вам ~
Когда оба значения являются целыми числами при делении Python использует разделение полов.
В python оператор /
предназначен для целочисленного деления. Вы можете посмотреть на него как на флоат-деление, за которым следует операция floor
.
Например,
8/7 == floor (8.0/7.0) == 1
8/-7 == floor (8.0/-7.0) == -2