基本python算术除法

基本python算术除法,python,math,python-2.x,Python,Math,Python 2.x,我有两个变量:count,它是我过滤对象的数量,以及每页的常量值。我想用每页的计数除以整数值,但不管我怎么做,我都会得到0或0.0: >>> count = friends.count() >>> print count 1 >>> per_page = 2 >>> print per_page 2 >>> pages = math.ceil(count/per_pages) >>> pr

我有两个变量:count,它是我过滤对象的数量,以及每页的常量值。我想用每页的计数除以整数值,但不管我怎么做,我都会得到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?

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


(我认为这种除法行为在Python 3中有所改变。)

整数除法是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.

它们是整数,因此在函数执行任何超出此范围的操作之前,
count/per_pages
为零。我不是一个真正的Python程序员,但我知道
(count*1.0)/pages
会满足您的需求。然而,也许有一个正确的方法可以做到这一点

编辑-是请参见@mipadi的答案和浮动(x)

来源:

math.ceil(x)

以浮点形式返回x的上限,即大于或等于x的最小整数值


这是因为您设置它的方式是执行操作,然后将其转换为float try

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,其未来的所有操作都应该能够进行除法运算,并以非整数结尾

>10/float(3)
>>> 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'>
>>> 
3.3333333333333335 >>>#或 >>> 10 / 3.0 3.3333333333333335 >>>#Python将任何十进制数设为浮点数 >>>a=3 >>>类型(a) >>>b=3.0 >>>类型(b) >>>

最好的解决方案可能是使用来自未来导入部门的

当我这样做时,它会起作用:count=float(count),per_page=float(per_page),pages=math.ceil(count/per_page),最后pages=int(pages)。但这有点愚蠢。参见[为什么这个除法在python中不起作用?]()。不必挑剔,但它是分子,而不是提名者=]我在关注“整数”部分的文档中忽略了这一点:P感谢r比处处乘以1.0更重要,为什么不直接使用来自uuu future uuuu import division的
?如果我对Python有任何了解,我可能会这么做:-)