정수 나눗셈이 다른 정수 대신 부동을 생성하는 이유는 무엇입니까?
Python에서는 다음 구분을 고려합니다.
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
.어떻게 해야 하나?새로운 디비전 오퍼레이터가 있나요, 아니면 항상 캐스팅해야 하나요?
PEP-238: 분할 연산자 변경 보기
// 연산자는 플로어 분할을 명확하게 요구할 수 있습니다.
헉, 즉시 발견됨2//2
. 이것은 플로트가 아닌 int를 출력합니다.
Python 2.7 및 Python 3에서 분할 연산자의 동작
Python 2.7의 경우: 기본적으로 분할 연산자는 정수 출력을 반환합니다.
결과를 두 배로 얻으려면 배당 또는 제수에 1.0을 곱하십시오.
100/35 => 2 # Expected is 2.857142857142857
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857
Python 3의 경우
// => used for integer output
/ => used for double output
100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0 # Floating-point result if the divisor or dividend is real
승인된 답변에는 이미 PEP 238이 기재되어 있습니다.PEP 전체를 읽지 않고 무슨 일이 일어나고 있는지에 관심이 있는 분들을 위해 무대 뒤에서 간단히 설명을 덧붙이고 싶습니다.
Python은 다음과 같은 연산자를 매핑합니다.+
,-
,*
그리고./
예를 들어, 특수 기능에 대한 설명입니다. a + b
와 동등하다
a.__add__(b)
Python 2의 division에 대해서는 디폴트만 있습니다./
에 맵되어 있다__div__
결과는 입력 유형에 따라 달라집니다(예:int
,float
).
Python 2.2는__future__
특징division
그 결과 분할 시멘틱이 다음과 같이 변경되었습니다(PE 238의 TL;DR).
/
매핑처__truediv__
"나눗셈의 수학적 결과의 합리적인 근사치를 반환해야 한다"(PE 238에서 인용)//
매핑처__floordiv__
플로어된 결과를 반환한다./
Python 3.0에서는 PEP 238의 변경이 기본 동작이 되어, 더 이상 특별한 방법은 없습니다.__div__
Python의 객체 모델에 있습니다.
Python 2와 Python 3에서 동일한 코드를 사용하려면
from __future__ import division
PEP 238 시멘틱스에 준거합니다./
그리고.//
.
Python 3 문서에 따르면 Python은 정수로 나누면 정수가 될 것으로 예상되지만 float를 생성합니다.
정수를 단독으로 인쇄하려면 다음을 사용하십시오.floor division method
바닥 분할은 0을 반올림하고 소수점을 제거합니다. Represented by //
따라서 2/2 대신에2//2
또한 다음에서 분할을 가져올 수 있습니다.__future__
Python 2 또는 Python 3의 사용에 관계없이 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1282945/why-does-integer-division-yield-a-float-instead-of-another-integer
'programing' 카테고리의 다른 글
MySQL: SELECT 문의 대소문자가 구분됩니까? (0) | 2023.01.09 |
---|---|
입력 필드 값 설정 (0) | 2023.01.09 |
원칙 2 엔티티에서 변경/업데이트된 모든 필드를 가져올 수 있는 기본 제공 방법이 있습니까? (0) | 2023.01.09 |
Java 인터페이스에서 정적 메서드를 정의할 수 없는 이유는 무엇입니까? (0) | 2023.01.09 |
Chrome 디버거에서 편집 (0) | 2023.01.09 |