Відповіді:
У 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, /
це не поділ підлоги, ані справжній поділ. Поточна прийнята відповідь на це не зрозуміла.
/
це поділ на підлогу, коли обидва аргументи є 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
print (2/3) ----> 0 Python 2.7
print (2/3) ----> 0.6666666666666666 Python 3.5
Python 2.7.10 проти Python 3.5
print (4/2) ----> 2 Python 2.7
print (4/2) ----> 2.0 Python 3.5
Тепер, якщо ви хочете мати (у python 2.7) такий же вихід, як у python 3.5, ви можете зробити наступне:
Пітон 2.7.10
from __future__ import division
print (2/3) ----> 0.6666666666666666 #Python 2.7
print (4/2) ----> 2.0 #Python 2.7
Там, де немає різниці між розділеннями підлоги як в python 2.7, так і в Python 3.5
138.93//3 ---> 46.0 #Python 2.7
138.93//3 ---> 46.0 #Python 3.5
4//3 ---> 1 #Python 2.7
4//3 ---> 1 #Python 3.5
-100 // 33
=> -4 ; 100 // -33
=> -4 ; але через напрямок округлення підлоги функціонал наступний може здатися протиінтуїтивним порівняно з попереднім: -100 // -33
=> 3 .
Як уже всі відповіли, //
це поділ підлоги.
Чому це важливо, це те, що //
це однозначно поділ підлоги у всіх версіях Python з 2.2, включаючи версії Python 3.x.
Поведінка /
може змінюватися залежно від:
__future__
імпорт чи ні (локальний модуль)-Q old
або-Q new
>>> print 5.0 / 2
2.5
>>> print 5.0 // 2
2.0
Python 2.7 та інша майбутня версія python:
/
)Лівий операнд ділиться на операнд правого
Приклад: 4 / 2 = 2
//
)Поділ операндів, де результатом є коефіцієнт, у якому цифри після десяткової точки видаляються. Але якщо один з операндів від'ємний, результат посилається, тобто округляється від нуля (до негативної нескінченності):
Приклади: 9//2 = 4
і 9.0//2.0 = 4.0
, -11//3 = -4
,-11.0//3 = -4.0
І /
дивізіон, і //
оператор підрозділу підлоги працюють аналогічно.
Подвійна коса риса,, //
- це поділ підлоги:
>>> 7//3
2
//
це поділ підлоги, він завжди дасть вам цілий рівень результату. Інший - «регулярний» поділ.
Наведені вище відповіді хороші. Я хочу додати ще один момент. До деяких значень обидва вони призводять до одного коефіцієнта. Після цього оператор ділення підлоги ( //
) працює нормально, але не /
оператор поділу ( ).
- > int(755349677599789174/2)
- > 377674838799894592 #wrong answer
- > 755349677599789174 //2
- > 377674838799894587 #correct answer
5.0//2
призводить до 2.0
, а не 2
тому, що тип повернення значення, що повертається з//
оператора дотримується правил примусу python (тип кастингу).
Python сприяє перетворенню нижчого типу даних (цілого) у вищий тип даних (float), щоб уникнути втрати даних.
//
це поділ підлоги, він завжди надасть вам значення підлоги результату./
- поділ з плаваючою комою.Далі - різниця між /
та //
; Я виконував ці арифметичні операції в Python 3.7.2
>>> print (11 / 3)
3.6666666666666665
>>> print (11 // 3)
3
>>> print (11.3 / 3)
3.7666666666666667
>>> print (11.3 // 3)
3.0
//
цілим поділом для причини введення оператора до цілого поділу.