Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0
Это предназначено? Я сильно помню, более ранние версии возвращаются int/int=int
? Что мне делать, есть ли новый оператор деления или я должен всегда разыгрывать?
python
integer
python-3.x
division
Йонас Быстрём
источник
источник
Ответы:
Взгляните на PEP-238 : смена оператора подразделения
источник
/
быть достаточно языком дизайна «ошибка» , которая должна были быть установлена в Python 3. это может быть спорным решение, но достаточное количество людей чувствовали , что это было правильной. Посчитай меня в группе, которая любит перемены. Хорошо, что мы все можем согласиться не согласиться. Приветствия. :)Ой, сразу нашел
2//2
.источник
Надеюсь, это может помочь кому-то мгновенно.
Поведение оператора деления в Python 2.7 и Python 3
чтобы получить результат в двойном кратном 1,0, чтобы «дивиденд или делитель»
источник
В принятом ответе уже упоминается PEP 238 . Я просто хочу добавить быстрый взгляд за кулисы для тех, кто интересуется происходящим, не читая весь ПКП.
Python карты операторов , как
+
,-
,*
и/
к специальным функциям, таким образом, что , например ,a + b
эквивалентноЧто касается деления в Python 2, по умолчанию существует только то,
/
что отображается на,__div__
и результат зависит от типов ввода (напримерint
,float
).В Python 2.2 появилась
__future__
функцияdivision
, которая изменила семантику деления следующим образом (TL; DR из PEP 238):/
карты, на__truediv__
которые необходимо «возвращать разумное приближение математического результата деления» (цитата из PEP 238)//
карты__floordiv__
, которые должны вернуть результат/
В Python 3.0 изменения PEP 238 стали поведением по умолчанию, и
__div__
в объектной модели Python больше нет специального метода .Если вы хотите использовать один и тот же код в Python 2 и Python 3, используйте
и придерживаться семантики PEP 238
/
и//
.источник
Согласно документации Python3, Python при делении на целое число будет генерировать число с плавающей точкой, несмотря на то, что ожидается, что оно будет целым
Для исключительно целочисленной печати используйте
floor division method
. Разделение по полу округляет ноль и удаляет десятичную точку.Represented by //
Следовательно, вместо 2/2 используйте
2//2
Вы также можете импортировать деление
__future__
независимо от использования python2 или python3.Надеюсь, поможет!
источник