2012-03-15 3 views
6

:가능한 math.ceil() 버그

print(int(math.ceil(24/10))) 

저를주는 '3'예상대로.

Active Python 2.5가 설치된 Windows Server에서 '2'를 표시합니다.

여기의 문제는 무엇이며 어떻게 해결할 수 있습니까?

여기에 내 원래의 코드입니다 :

number_of_pages = int(math.ceil(number_of_rows/number_of_rows_per_page)) 

감사합니다,

베리

+0

저는 이것이 파이썬에서는 버그가 아니라 낮은 레벨에 있다고 생각합니다. – bigblind

답변

16

파이썬 2.X는 disivion을 절단 사용하므로 24/10에 대한 답은 2 ceil은 여전히 ​​2 2입니다

해결 방법은 피연산자 중 하나를 부동 상태로 변환하는 것입니다.

print(int(math.ceil(24.0/10))) 
+0

+1. 나를 이길 ... – Jon

+0

이것은 혼란을 일으키는 원인이됩니까? – Baz

+4

예를 들어 int 나누기 동작이 필요하지 않은 경우 하위 호환성을 가지고 있다면,'__future__ import division'에서'1/2 = 0.5' 일 때 합당한 의미를 가질 수 있습니다. – 9000

1

다음을 시도해보십시오. print(int(math.ceil(24/10.0))), 올바른 값을 반환합니다. 지적했듯이, Python 2.5에서 표현식 24/102으로 계산됩니다. 이는 정수 나누기를 수행하기 때문입니다.

3

프로그래밍 언어의 빠른 정독은 정수로 나눈 그 정수

정수 반환 발견

  • 파이썬 2
  • 자바
  • C++
  • C
  • C#을
  • ,210
  • 루비
  • OCaml의
  • F
  • 갈 #
  • FORTRAN

부동 소수점 (별표 정수를 리턴하는 다른 신택스가 존재한다는 것을 의미한다)

  • 파이썬 3 *
  • java 스크립트 *
  • VBScript를
  • VB
  • PHP는
  • 펄 *
  • 다트.순 *
  • 얼랑 *
  • 다른 파스칼 *

뭔가

  • Clojure에서 (반환 비율은 정수를 반환 할 수없는 경우) 변화에

파이썬의 선택 분할 연산자의 의미는 당시 quite controversial이었습니다. 정수를 반환하는 것은 종종 프로그래머와 수학자를 시작하는 것을 놀라게합니다. 그러나 숙련 된 프로그래머는 두 개의 정수를 나눌 때 부동 소수점을 반환 할 수 있다고 생각할 때 같은 방식으로 느껴지기도합니다.

+0

저는이 비율을 사용하여 수레를 저장하는 아이디어를 좋아합니다. 파이썬으로 고려 되었습니까? – Baz

+0

'fractions' 모듈에'Fraction'이 있습니다. 하지만 거의 절대 필요하지 않습니다. 더 친숙한 부동 소수점 역할을하는'decimal' 모듈에'Decimal '도 있습니다. 이러한 데이터 유형은 본질적으로 정수 및 부동 소수점보다 느립니다. 그들은 또한 다루기 힘들다. 필요에 따라 사용하십시오. –

관련 문제