programing

정수 나눗셈이 다른 정수 대신 부동을 생성하는 이유는 무엇입니까?

javaba 2023. 1. 9. 21:27
반응형

정수 나눗셈이 다른 정수 대신 부동을 생성하는 이유는 무엇입니까?

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

반응형