基础Python算术 - 除法
我有两个变量:count,它是我筛选出来的对象数量,还有一个常量值 per_page。我想把 count 除以 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 会给我浮点数而不是整数?
6 个回答
1
math.ceil(x)
这个函数会返回一个浮点数,表示大于或等于x的最小整数值,也就是把x向上取整。
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.
15
在Python中,当两个数字都是整数时,进行的是整数除法。这意味着像 1 / 2
这样的计算其实是在问“2能放进1多少次”,答案显然是0次。如果你想要得到小数结果,可以把其中一个数字转换成浮点数,也就是小数,比如 1 / float(2)
,这样就会得到 0.5
,正是你想要的结果。而且,当然,使用 math.ceil(1 / float(2))
也会得到 1
,这也是你预期的结果。
(我觉得在Python 3中,这种除法的行为有所改变。)