基础Python算术 - 除法

6 投票
6 回答
23593 浏览
提问于 2025-04-16 02:02

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

来自Python文档(数学模块)

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中,这种除法的行为有所改变。)

撰写回答