2014-02-28 2 views
5

Why is -1/2 evaluated to 0 in C++, but -1 in Python?은 파이썬에서 정수 나누기가 무한대라고 말합니다. 즉, floor이 결과에 적용됩니다. 함수 int() 음수 무한대 (바닥) 또는 0으로 반올림?

나는 내 마음에 -2 될 것으로 예상했다 연습에 int(-1.5) == -1를 얻을 동안 int(value) 또한, floor처럼 뭔가를 할 것이라고 생각했다.

질문은 다음과 같습니다. 왜 integer divisionint() 사이의 규칙이 일치하지 않는 이유는 무엇입니까? 합리적인 설명이 있습니까?

답변

4

int()은 소수 구성 요소를 제거합니다. 어떤 반올림도하지 않습니다. documentation :

x가 부동 소수점이면 변환이 0으로 잘립니다.

floatint으로 바꾸는 것은 완전히 논리적 인 동작입니다. 이것은 이 아니며 부서, 바닥재 또는 기타입니다.

바닥 분할 연산자 플로어가 아니라 잘립니다. 파이썬 2에서는 두 개의 정수 피연산자에 대해 / 부분도 있습니다. documentation 다시 :

복귀 바닥 :

결과

math.floor() 같이 설명된다 결과에 적용된 '바닥'기능 수학 부문 즉 x을 float로 사용합니다. 가장 큰 정수 값은 x보다 작거나 같습니다.

여기서는 불일치가 없습니다. 부동 소수점을 정수로 자르는 것은 잘립니다.

+1

음을 참조는 – zhangxaochen

+0

어쩌면는 다큐와 일치 아니다 ... "아니 왜, 워드 프로세서 그렇게 말"처럼 보이지만, 왜 것이 바람직합니다 ? int (-1.0/49 * 49) = 0이지만 int (-1.0/50 * 50) = -1이됩니다. int()가 반올림해서는 안되는 이유는 무엇입니까? – maxy

+0

반올림을위한 명시적인 ['round()'함수] (https://docs.python.org/2/library/functions.html#round)가 있습니다. 'int()'는 명시 적으로 float 값의 정수 부분을 취하며 반올림하지 않습니다. 그것은 다른 작업입니다. –

0

round()ndigits = 0은 예상 한 것입니다. 그러나 round() 정수를 반환하지만, 플로트하지 않습니다 the documentation