나누기에 사용될 때 '/'와 '//'의 차이점은 무엇입니까?


답변:


650

파이썬 3.x의에서, 5 / 2반환 2.55 // 2반환합니다 2. 전자는 부동 소수점 나누기이고 후자는 플로어 나누기 이며 때로는 정수 나누기 라고도 합니다 .

2.x 행의 Python 2.2 이상에서는을 수행하지 않으면 정수에 차이가 없으므로 from __future__ import divisionPython 2.x가 3.x 동작을 채택합니다.

향후 수입에 관계없이 운영의 층 분할 결과이기 때문에 5.0 // 2반환 2.0됩니다.

자세한 설명은 https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator 에서 확인할 수 있습니다.


편집 : 파이썬 2.2부터 나눗셈을 "수정"할 수 있습니다! (링크 된 PEP를 읽으십시오)
u0b34a0f6ae

2
또한 python -Qnew. 다른 분할 옵션 : -Qold(기본값) -Qwarn,-Qwarnall
존 라 Rooy

2
모든 버전에서 5.0 / 2반환 2.5되는 것을 지적 할 가치 가 있습니다 5 / 2.0. 이전의 동작은 두 피연산자가 모두 다를 때만 다릅니다 int.
Chris

2
숫자가 음수 인 경우는 어떻습니까? 음의 정수에 대해 동작이 동일합니까?
Aaron Franke

1
@Srinivasu 당신의 예는 도움이되지 않습니다. 5 // 2 (2를 생성)와 -5 // 2 (-3을 생성)가 더 좋습니다.
Marvin

67

파이썬 2.x 설명 :

Python 2.x 라인을 명확히하기 위해 /바닥 나눗셈이나 진정한 나눗셈이 아닙니다. 현재 받아 들여진 대답은 명확하지 않습니다.

/때 바닥 부문은 모두 인수는 int하지만, 사실 사업부입니다 중 하나 또는 둘 모두 인수의가 있습니다 float.

위의 내용은 더 많은 진실을 말하고 받아 들여진 대답의 두 번째 단락보다 명확합니다.


33

//유형에 관계없이 "바닥 구분"을 구현합니다. 그래서 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 를 참조하십시오.


이것은 좋은 대답입니다. PEP 링크가 도움이됩니다. 또한, 사용을 고려 math.floor()하거나 math.fmod()당신이하지 않으면 반드시 무슨 일이 단항 연산자에 대한 것입니다.
Scott Lowrey

///양방향 어림 사업자 (두 개의 피연산자, 왼쪽과 오른쪽, 분자와 분모)이다
iono

28

/ -> 부동 소수점 나누기

// -> 층 구분

파이썬 2.7과 파이썬 3.5 둘 다에서 몇 가지 예를 봅시다.

파이썬 2.7.10 대 파이썬 3.5

print (2/3)  ----> 0                   Python 2.7
print (2/3)  ----> 0.6666666666666666  Python 3.5

파이썬 2.7.10 대 파이썬 3.5

  print (4/2)  ----> 2         Python 2.7
  print (4/2)  ----> 2.0       Python 3.5

이제 python 3.5에서와 동일한 출력을 원한다면 (파이썬 2.7에서) 다음을 수행 할 수 있습니다.

파이썬 2.7.10

from __future__ import division
print (2/3)  ----> 0.6666666666666666   #Python 2.7
print (4/2)  ----> 2.0                  #Python 2.7

파이썬 2.7과 파이썬 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

이것은 int (5/2)와 동일합니까?
PirateApp

숫자가 음수 인 경우는 어떻습니까? 음의 정수에 대해 동작이 동일합니까?
Aaron Franke

1
Re : Negatives -Behavior는 동일하지만 결과가 바닥이므로 반올림은 항상 더 부정적인 쪽으로 내려 갑니다 . 몇 가지 예 : => -4 ; => -4 ; 그러나 바닥 기능의 반올림 방향으로 인해 다음 기능은 이전 기능과 비교할 때 반 직관적 인 것처럼 보일 수 있습니다. => 3 . -100 // 33100 // -33-100 // -33
Erdős-Bacon

22

모두가 이미 대답했듯이 //바닥 구분입니다.

이것이 중요한 이유는 //Python 3.x 버전을 포함하여 2.2의 모든 Python 버전에서 분명하게 구분되어 있기 때문 입니다.

의 동작은 /다음에 따라 변경 될 수 있습니다.

  • 활성 __future__가져 오기 여부 (모듈 로컬)
  • Python 명령 행 옵션 -Q old또는-Q new


5

파이썬 2.7과 다가오는 파이썬 버전 :

  • 구분 ( /)

왼쪽 피연산자를 오른쪽 피연산자로 나눕니다.

예: 4 / 2 = 2

  • 플로어 디비전 ( //)

결과가 소수점 이하의 숫자가 제거되는 몫인 피연산자의 나눗셈입니다. 그러나 피연산자 중 하나가 음수이면 결과는 바닥입니다. 즉, 0에서 반올림됩니다 (음의 무한대로).

예 : 9//2 = 49.0//2.0 = 4.0, -11//3 = -4,-11.0//3 = -4.0

/부문 및 //바닥 나누기 연산자는 비슷한 방식으로 운영된다.


2
무한대로 향하고 0에서 멀어지면 다른 것입니다. 예 : (-1.2 및 3.4) : "flooring"은 음의 무한대 (-2 및 3), "truncating"은 0 (-1 및 3), "saturating"은 0 (-2 및 4)에서 멀어지고, "천장"은 양의 무한대 (-1과 4)를 향합니다.
Phernost


3

//층 나누기, 항상 결과의 정수 층을 제공합니다. 다른 하나는 '정규'부서입니다.


2

방정식의 답은 다음 작은 정수로 반올림되거나 소수점이 .0 인 부동 소수점입니다.

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0

2

위의 답변이 좋습니다. 다른 요점을 추가하고 싶습니다. 둘 다 일부 값까지는 동일한 몫이됩니다. 그 후 층 나누기 연산자 ( //)는 제대로 작동하지만 나누기 ( /) 연산자 는 작동하지 않습니다 .

 - > int(755349677599789174/2)
 - > 377674838799894592      #wrong answer
 - > 755349677599789174 //2
 - > 377674838799894587      #correct answer

-1

5.0//2결과 2.0, 그리고 2때문에 반환 형식 반환 값의에서// 연산자 파이썬 강압 (형변환) 규칙을 따른다.

파이썬은 데이터 손실을 피하기 위해 더 낮은 데이터 유형 (정수)을 더 높은 데이터 유형 (부동)으로 변환합니다.


-1
  • // 층 구분이며 항상 결과의 층 값을 제공합니다.
  • 다른 하나 /는 부동 소수점 나누기입니다.

다음과의 차이점은 다음 /과 같습니다 //. 파이썬 3.7.2에서 이러한 산술 연산을 실행했습니다.

>>> print (11 / 3)
3.6666666666666665

>>> print (11 // 3)
3

>>> print (11.3 / 3)
3.7666666666666667

>>> print (11.3 // 3)
3.0

2
이 답변은 다른 아이디어가 다루지 않는 것을 어떻게 추가합니까? 아니면이 답변이 다른 답변보다 어떤 식으로 더 나은가요?
Rory Daulton 19

2
다음은 프로그램의 출력입니다. 아무것도 설명하지 않습니다.
Lorne의 후작
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.