可能math.ceil()错误

问题描述:

在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

的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

试试这个:print(int(math.ceil(24/10.0))),它会返回正确的值。正如已经指出的那样,在Python 2.5中,表达式24/10的计算结果为2,因为它正在执行整数除法。

所有你需要知道的是http://www.python.org/dev/peps/pep-0238/

编程语言的快速细读发现整数由整数分割返回

的整数

  • 蟒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