基本的python算术 - 除法

时间:2010-07-29 22:02:04

标签: python math python-2.x

我有两个变量:count,我的过滤对象的数量,以及per_page的常量值。我想用per_page除以计数并获得整数值,但无论我尝试什么 - 我得到0或0.0:

>>> count = friends.count()
>>> print count
1
>>> per_page = 2
>>> print per_page
2
>>> pages = math.ceil(count/per_pages)
>>> print pages
0.0
>>> pages = float(count/per_pages)
>>> print pages
0.0

我做错了什么,为什么math.ceil给出浮点数而不是int?

6 个答案:

答案 0 :(得分:16)

当两个操作数都是整数时,Python会进行整数除法,这意味着1 / 2基本上是“2变为1的次数”,这当然是0次。要做你想做的事,将一个操作数转换为浮点数:1 / float(2) == 0.5,正如你所期望的那样。当然,math.ceil(1 / float(2))会产生1,正如您所期望的那样。

(我认为这种划分行为在Python 3中发生了变化。)

答案 1 :(得分:6)

整数除法是Python中/运算符的默认值。 3.0。这种行为看起来有点奇怪。它返回没有余数的股息。

>>> 10 / 3
3

如果您正在运行Python 2.6+,请尝试:

from __future__ import division

>>> 10 / 3
3.3333333333333335

如果你运行的是比这更低版本的Python,你需要将分子或分母中的至少一个转换为浮点数:

>>> 10 / float(3)
3.3333333333333335

另外,math.ceil 总是返回一个浮动...

>>> import math 
>>> help(math.ceil)

ceil(...)
    ceil(x)

    Return the ceiling of x as a float.
    This is the smallest integral value >= x.

答案 2 :(得分:0)

它们是整数,所以count/per_pages在函数执行任何操作之前都为零。我真的不是Python程序员,但我知道(count * 1.0) / pages会做你想要的。然而,这可能是一种正确的方法。

编辑 - 是的,请参阅@ mipadi的回答和float(x)

答案 3 :(得分:0)

来自Python documentation (math module)

  

math.ceil(x)

     

将x的上限作为浮点数返回,最小整数值大于或等于x。

答案 4 :(得分:0)

因为你设置的方法是执行操作,然后将其转换为浮动试试

count = friends.count()
print count

per_page = float(2)
print per_page

pages = math.ceil(count/per_pages)

print pages
pages = count/per_pages

通过将count或per_page转换为float,它的所有未来操作都应该能够进行分割并最终得到非整数

答案 5 :(得分:0)

>>> 10 / float(3)
3.3333333333333335
>>> #Or 
>>> 10 / 3.0
3.3333333333333335
>>> #Python make any decimal number to float
>>> a = 3
>>> type(a)
<type 'int'>
>>> b = 3.0
>>> type(b)
<type 'float'>
>>> 

最好的解决方案可能是使用from __future__ import division