我有两个变量: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?
答案 0 :(得分:16)
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