일반적으로 표현식의 데이터 유형은 인수 유형에 따라 다릅니다. 이 규칙은 대부분의 연산자에 적용됩니다. 예를 들어 두 개의 정수를 더할 때 결과는 정수여야 합니다. 하지만, 나눗셈의 경우 기대치가 서로 다르기 때문에 잘 되지 않습니다. 나눗셈이 정확한 부동 소수점 숫자를 생성할 것으로 예상하는 경우도 있고 반올림된 정수 결과가 필요한 경우도 있습니다.
일반적으로 division(/)의 파이썬 정의는 인수에만 의존합니다. 예를 들어 python 2.7에서 20/7을 나누는 것은 두 인수가 모두 정수이기 때문에 2입니다. 그러나 인수가 부동 소수점 숫자였기 때문에 20./7은 2.857142857142857을 출력으로 생성합니다.
위의 '/' 정의는 작성자가 예상하지 못한 데이터 유형이 사용된 애플리케이션에서 종종 문제를 일으켰습니다.
섭씨에서 화씨로 온도를 변환하는 간단한 프로그램을 고려하면 입력에 따라 두 가지 다른 결과가 생성됩니다. 한 사용자가 정수 인수(18)와 다른 부동 소수점 인수(18.0)를 제공하면 모든 입력이 동일한 숫자 값을 가졌음에도 응답이 완전히 다릅니다.
#Conversion of celcius to Fahrendheit in python 2.6 >>> print 18*9/5 + 32 64 >>> print 18.0*9/5 + 32 64.4 >>> 18 == 18.0 True
위에서 우리는 18.0을 통과하면 올바른 출력을 얻고 18을 통과하면 잘못된 출력을 얻는 것을 볼 수 있습니다. 이 동작은 python 2.x에서 모든 인수가 정수인 경우 "/" 연산자가 바닥 나누기로 작동하기 때문입니다. 그러나 인수 중 하나가 float 값인 경우 "/" 연산자는 float 값을 반환합니다.
명시적 변환 함수(예:float(x))는 이를 방지하는 데 도움이 될 수 있습니다. 그러나 아이디어는 예기치 않은 데이터 유형의 드문 경우를 커버하기 위해 복잡한 변환 없이 파이썬이 단순하고 희소한 언어가 되도록 하는 것입니다. Python 2.2 버전부터 예상되는 내용을 명확히 하기 위해 새로운 나누기 연산자가 추가되었습니다. 일반 / 연산자는 앞으로 부동 소수점 결과를 반환합니다. 특수 나누기 연산자 //는 반올림된 결과를 반환합니다.
>>> # Python 2.7 program to demonstrate the use of "//" for both integers and floating point number >>> print 9//2 4 >>> print -9//2 -5 >>> print 9.0//2 4.0 >>> print -9.0//2 -5.0
Python 3.x의 나눗셈 연산
python 3.x에서는 위에서 언급한 결함이 제거되었으며 '/' 연산자는 정수 및 부동 소수점 인수 모두에 대해 부동 소수점 나누기를 수행합니다.
>>> #Conversion of celcius to Fahrendheit in python 3.x >>> #Passing 18 (integer) >>> print (18*9/5 + 32) 64.4 >>> #Passing 18.0(float) >>> print(18.0*9/5 + 32) 64.4
또한 +ve 또는 –ve 인수를 전달할 때도 차이가 없습니다.
>>> print(9/2) 4.5 >>> print(-9/2) -4.5 >>> print(9.0/2) 4.5 >>> print(-9.0/2) -4.5