2012-03-15 55 views
6

在Windows 7上的Python 3.2,以下內容:可能math.ceil()錯誤

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

給我 '3' 預期。

在運行Python 2.5的Windows Server上,它給了我'2'。

這裏有什麼問題,我該如何解決它?

這裏是我的原代碼:

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

感謝,

巴里

+0

我想這不是Python中的錯誤,而是更低的級別。 – bigblind 2012-03-15 19:16:11

回答

16

的Python 2.x使用截斷disivion,所以答案是24/10 2. 2 ceil仍然是2 。

修復方法是將其中一個操作數轉換爲浮點數:

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

+1。打我吧...... – Jon 2012-03-15 19:16:35

+0

這會造成很多混亂嗎? – Baz 2012-03-15 19:19:05

+4

如果您不需要int分割行爲,例如向後兼容性,你可以從'__未來_導入部門'並且在'1/2 = 0.5'時具有合理的語義。 – 9000 2012-03-15 19:20:09

1

試試這個:print(int(math.ceil(24/10.0))),它會返回正確的值。正如已經指出的那樣,在Python 2.5中,表達式24/10的計算結果爲2,因爲它正在執行整數除法。

3

編程語言的快速細讀發現整數由整數分割返回

的整數

  • 蟒2
  • 的java
  • C++
  • Ç
  • C#
  • 紅寶石
  • ocaml的
  • F#
  • FORTRAN

浮點(星號表示存在替代語法返回整數)

  • 蟒3 *
  • java腳本
  • PHP
  • 的perl *
  • 鏢*
  • 的VBScript
  • VB。淨*
  • 二郎*
  • 帕斯卡*

別的

  • 的Clojure(返回的比例,如果它不能返回一個整數)

Python的選擇變化該師的語義是當時的quite controversial。返回一個整數通常讓程序員和數學家感到意外,但是,有經驗的程序員在發現劃分兩個整數可以返回浮點時經常會有同樣的感覺。

+0

我喜歡使用比率來存儲浮游物的想法。它是否被考慮用於Python? – Baz 2012-03-15 21:47:04

+0

在'fractions'模塊中有'Fraction'。但你幾乎從不需要它。在'decimal'模塊中還有'Decimal',它充當了更友好的浮點。這些數據類型固有地比整數和浮點更慢。他們也很笨拙。根據需要使用。 – 2012-03-15 22:15:44