Пожалуйста, обратитесь к «Задаче с// целочисленным делением», чтобы узнать, почему оператор вводит целочисленное деление.
Шрирам
Ответы:
651
В Python 3.x 5 / 2вернется 2.5и 5 // 2вернется 2. Первая - это деление с плавающей запятой, а вторая - деление по полу , иногда также называемое целочисленным делением .
В Python 2.2 или новее в строке 2.x для целых чисел нет никакой разницы, если только вы не выполните a from __future__ import division, в результате чего Python 2.x принимает поведение 3.x.
Независимо от будущего импорта, 5.0 // 2вернется, 2.0так как это результат операции на уровне пола.
Отредактировано: Вы можете "исправить" разделение начиная с Python 2.2! (Просто прочитайте связанный PEP)
u0b34a0f6ae
2
также python -Qnew. другие варианты деления: -Qold( по умолчанию), -Qwarn,-Qwarnall
Джон Ла Роого
2
Стоит отметить, что 5.0 / 2возвращается 2.5во всех версиях, как и в предыдущем случае 5 / 2.0- старое поведение отличается только тогда, когда оба операнда int.
Крис
2
А когда цифры отрицательные? Одинаково ли поведение для отрицательных целых чисел?
Аарон Франке
1
@Srinivasu Ваш пример не помогает. Лучше было бы 5 // 2 (что дает 2) и -5 // 2 (что дает -3).
Марвин
67
Пояснение Python 2.x:
Чтобы прояснить для линии Python 2.x, не /является ни деление по полу, ни истинное деление. Текущий принятый ответ не ясен по этому вопросу.
/деление по полу, когда оба аргумента равны int, но это истинное деление, когда один или оба аргумента равны float.
Вышесказанное говорит больше правды и более понятно, чем 2-й абзац в принятом ответе.
Это хороший ответ. PEP ссылка полезна. Кроме того, рассмотрите возможность использования math.floor()или, math.fmod()если вы не уверены, что происходит с унарными операторами.
Скотт Лоури
/и //являются би-ни капли операторов (два операнда, левый и правый, числитель и знаменатель)
ионосферные
28
/ -> Деление с плавающей точкой
// -> Этажное деление
Давайте рассмотрим некоторые примеры как в Python 2.7, так и в Python 3.5.
А когда цифры отрицательные? Одинаково ли поведение для отрицательных целых чисел?
Аарон Франке
1
Re: Негативы - Поведение такое же, но помните, что результат равен полу, поэтому округление всегда идет вниз в сторону более негативного . Несколько примеров: -100 // 33=> -4 ; 100 // -33=> -4 ; но из-за направления округления функции пола, следующий может показаться нелогичным по сравнению с предыдущим: -100 // -33=> 3 .
Erdős-Bacon
22
Как все уже ответили, //это напольное деление.
Почему это важно, так //это однозначное разделение по полу во всех версиях Python от 2.2, включая версии Python 3.x.
Поведение /может меняться в зависимости от:
Активный __future__импорт или нет (локальный модуль)
Python параметр командной строки, либо -Q oldили-Q new
Не понял, что разделение по этажам тоже работает с нецелыми числами. Спасибо!
Майк
5
Python 2.7 и другие будущие версии python:
Отдел ( /)
Делит левый операнд на правый операнд
Пример: 4 / 2 = 2
Этаж Отдел ( //)
Разделение операндов, где результатом является частное, в котором удаляются цифры после десятичной точки. Но если один из операндов отрицателен, результат получается беспорядочным, то есть округляется от нуля (в сторону отрицательной бесконечности):
К бесконечности и вдали от нуля - разные вещи. Пример для (-1.2 и 3.4): «настил» - к отрицательной бесконечности (-2 и 3), «усечение» - к нулю (-1 и 3), «насыщение» - от нуля (-2 и 4), и «потолок» - к положительной бесконечности (-1 и 4).
Приведенные выше ответы являются хорошими. Я хочу добавить еще один момент. До некоторых значений оба они приводят к одному и тому же частному. После этого этажного деления оператор ( //) работает нормально, но не /оператор деления ( ).
5.0//2в результате 2.0, а не 2потому, что тип возвращаемого значения из //оператора следует правилам приведения (преобразования типов) в python.
Python способствует преобразованию младшего типа данных (целое число) в более высокий тип данных (число с плавающей запятой), чтобы избежать потери данных.
//
целочисленным делением», чтобы узнать, почему оператор вводит целочисленное деление.Ответы:
В Python 3.x
5 / 2
вернется2.5
и5 // 2
вернется2
. Первая - это деление с плавающей запятой, а вторая - деление по полу , иногда также называемое целочисленным делением .В Python 2.2 или новее в строке 2.x для целых чисел нет никакой разницы, если только вы не выполните a
from __future__ import division
, в результате чего Python 2.x принимает поведение 3.x.Независимо от будущего импорта,
5.0 // 2
вернется,2.0
так как это результат операции на уровне пола.Подробное описание можно найти по адресу https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator.
источник
python -Qnew
. другие варианты деления:-Qold
( по умолчанию),-Qwarn
,-Qwarnall
5.0 / 2
возвращается2.5
во всех версиях, как и в предыдущем случае5 / 2.0
- старое поведение отличается только тогда, когда оба операндаint
.Пояснение Python 2.x:
Чтобы прояснить для линии Python 2.x, не
/
является ни деление по полу, ни истинное деление. Текущий принятый ответ не ясен по этому вопросу./
деление по полу, когда оба аргумента равныint
, но это истинное деление, когда один или оба аргумента равныfloat
.Вышесказанное говорит больше правды и более понятно, чем 2-й абзац в принятом ответе.
источник
//
реализует «разделение на пол», независимо от вашего типа. Так1.0/2.0
что даст0.5
, но так и даст1/2
,1//2
и1.0//2.0
даст0
.См. Https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator для получения подробной информации.
источник
math.floor()
или,math.fmod()
если вы не уверены, что происходит с унарными операторами./
и//
являются би-ни капли операторов (два операнда, левый и правый, числитель и знаменатель)/ -> Деление с плавающей точкой
// -> Этажное деление
Давайте рассмотрим некоторые примеры как в Python 2.7, так и в Python 3.5.
Python 2.7.10 против Python 3.5
Python 2.7.10 против Python 3.5
Теперь, если вы хотите иметь (в python 2.7) тот же вывод, что и в python 3.5, вы можете сделать следующее:
Python 2.7.10
Где, так как нет разницы между делением пола как в Python 2.7, так и в Python 3.5
источник
-100 // 33
=> -4 ;100 // -33
=> -4 ; но из-за направления округления функции пола, следующий может показаться нелогичным по сравнению с предыдущим:-100 // -33
=> 3 .Как все уже ответили,
//
это напольное деление.Почему это важно, так
//
это однозначное разделение по полу во всех версиях Python от 2.2, включая версии Python 3.x.Поведение
/
может меняться в зависимости от:__future__
импорт или нет (локальный модуль)-Q old
или-Q new
источник
источник
Python 2.7 и другие будущие версии python:
/
)Делит левый операнд на правый операнд
Пример:
4 / 2 = 2
//
)Разделение операндов, где результатом является частное, в котором удаляются цифры после десятичной точки. Но если один из операндов отрицателен, результат получается беспорядочным, то есть округляется от нуля (в сторону отрицательной бесконечности):
Примеры:
9//2 = 4
и9.0//2.0 = 4.0
,-11//3 = -4
,-11.0//3 = -4.0
И
/
дивизион, и//
оператор дивизиона пола работают аналогичным образом.источник
Двойная косая черта
//
, это напольное деление:источник
//
Это деление по этажам, оно всегда даст вам целое число результата. Другое «регулярное» деление.источник
Ответ уравнения округляется до следующего меньшего целого числа или с плавающей запятой с .0 в качестве десятичной точки.
источник
Приведенные выше ответы являются хорошими. Я хочу добавить еще один момент. До некоторых значений оба они приводят к одному и тому же частному. После этого этажного деления оператор (
//
) работает нормально, но не/
оператор деления ( ).источник
5.0//2
в результате2.0
, а не2
потому, что тип возвращаемого значения из//
оператора следует правилам приведения (преобразования типов) в python.Python способствует преобразованию младшего типа данных (целое число) в более высокий тип данных (число с плавающей запятой), чтобы избежать потери данных.
источник
//
Это разделение по полу, оно всегда даст вам минимальное значение результата./
- деление с плавающей точкой.Ниже приведены различия между
/
и//
; Я выполнил эти арифметические операции в Python 3.7.2источник