2012-03-15 5 views
6

、:可能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

答えて

16

のPython 2.xではdisivionを切り捨て使用するため、24/10への答えは2のceilはまだ2 2です。

修正点は、オペランドの1つをfloatに変換することです。

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

+1。私にそれを打つ... – Jon

+0

これは多くの混乱を引き起こしますか? – Baz

+4

たとえば、除算動作を必要としない場合。下位互換性を保つために、 '__future__ import division'から' 1/2 = 0.5'のときに妥当なセマンティクスを持つことができます。 – 9000

1

これを試してください:print(int(math.ceil(24/10.0)))、正しい値を返します。指摘したように、Python 2.5では、式24/10は、整数除算を実行しているので、2と評価されます。

3

プログラミング言語の迅速な閲覧を整数で割ったもの整数# C

整数

  • パイソン2
  • ジャワ
  • C++
  • C
  • を返す発見#
  • 行く
  • FORTRAN

浮動小数点(アスタリスクは整数を返すように代替構文があることを意味する)

  • のpython 3 F
  • ルビー
  • ocamlの
  • *
  • javaスクリプト*
  • VBScriptの
  • VB
  • PHP
  • のperl *
  • ダーツ。ネット*
  • のerlang *
  • 変化にパスカル*

何か他のもの

  • Clojureの(それは整数を返すことができない場合の比率を返します)

Pythonの選択そのときの除算演算子の意味はquite controversialでした。しかし、整数を返すことはプログラマーや数学者の初心者にとって驚くべきことですが、経験豊かなプログラマーは2つの整数を分割することで浮動小数点を返すことができると感じることがよくあります。

+0

私は浮動小数点を格納するために比率を使用するというこの考えが好きです。それはPythonのために考慮されていますか? – Baz

+0

'fractions'モジュールに' Fraction'があります。しかし、あなたはそれをほとんど必要としません。親和性の高い浮動小数点として機能する 'decimal'モジュールには' Decimal'もあります。これらのデータ型は整数と浮動小数点よりも本質的に遅いです。彼らはまた、扱いにくいです。必要に応じて使用してください。 –