为什么整数除法会产生浮点数而不是另一个整数?

276 投票
4 回答
226556 浏览
提问于 2025-04-15 13:37

考虑一下在Python 3中的这个除法:

>>> 2/2
1.0

这是故意这样设计的吗?我记得早期版本的结果是 int/int = int。我该怎么办呢?现在有新的除法运算符吗,还是我必须一直转换类型?


在2.x版本中,行为确实是相反的;可以查看 如何强制除法结果为浮点数?除法总是向下取整到0? 来了解2.x版本特有的相反问题。

4 个回答

61

Python 2.7和Python 3中的除法运算符行为

在Python 2.7中:默认情况下,除法运算符会返回整数结果。

如果想要得到小数结果,可以把被除数或除数乘以1.0。

100/35 => 2 # Expected is 2.857142857142857
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857

在Python 3中

// => used for integer output
/ => used for double output

100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0    # Floating-point result if the divisor or dividend is real
77

哎呀,马上发现了 2//2。这个写法会输出一个整数,而不是小数。

330

看看这个链接:PEP-238,它讲的是改变除法运算符的事情。

这里提到的 // 符号可以用来明确表示向下取整的除法。

撰写回答