6

我有两个变量: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 ?

4

6 回答 6

15

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

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

于 2010-07-29T22:06:07.637 回答
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.
于 2010-07-29T22:06:24.283 回答
1

来自Python 文档(数学模块)

math.ceil(x)

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

于 2010-07-29T22:06:55.110 回答
0

它们是整数,因此count/per_pages在函数可以做任何事情之前为零。我真的不是 Python 程序员,但我知道那(count * 1.0) / pages会做你想做的事。但是,可能有一种正确的方法可以做到这一点。

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

于 2010-07-29T22:06:25.700 回答
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 转换为浮点数,其所有未来操作都应该能够进行除法并最终得到非整数

于 2010-07-29T22:07:51.580 回答
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

于 2010-07-29T23:16:23.603 回答