2

我在划分时遇到了问题

my max_sum = 14
total_no=4  

所以当我这样做的时候

print "x :", (total_sum/total_no)

,我得到 3 而不是 3.5

我尝试了多种打印方式,但都失败了,有人可以告诉我以 3.5 格式获得的方式吗?

谢谢

4

5 回答 5

9

在 Python 2.x 中,默认情况下将两个整数相除会得到另一个整数。这通常令人困惑,并且已在 Python 3.x 中得到修复。您可以通过将其中一个数字转换为浮点数来绕过它,这将自动转换另一个:

float( 14 ) / 4 == 3.5

相关 PEP编号为 238

当前除法 (/) 运算符对数值参数的含义不明确:如果参数是整数或长整数,它会返回除法的数学结果的下限,但如果参数是浮点数或复数,它会返回除法结果的合理近似值. 当整数不是预期的但可能作为输入时,这使得预期浮点或复杂结果的表达式容易出错。

由于严重的向后兼容性问题,它在 Python 2.x 中没有更改,但它是 Python 3.x 中的主要更改之一。你可以用这条线强制新的划分

from __future__ import division

在 Python 脚本的顶部。这是一个__future__-import - 它用于强制进行语法更改,否则可能会破坏您的脚本。还有很多其他的__future__进口;在准备迁移到 Python 3.x 时,它们通常是一个好主意。

请注意,//运算符始终表示整数除法;如果你真的想要这种行为,你应该优先使用它而不是/. 请记住,“显式胜于隐式”!

于 2010-09-01T20:06:05.047 回答
2

您正在划分两个整数,结果也将是一个整数,在 python 2 中。尝试将您的操作数之一设为浮点数,例如max_sum = 14.0ortotal_no = 4.0以获得浮点数结果。

如果您希望 python 2.X 在这方面表现得更直观,您可以添加

from __future__ import division

在脚本的顶部。在 python 3 中,除法按您的预期工作。

于 2010-09-01T20:06:16.493 回答
1

使 max_sum=14.0 或 total_no=4.0

于 2010-09-01T20:04:20.510 回答
0

你正在做一个整数运算,所以你得到最接近的整数结果:3。

您应该显式/隐式转换max_sumtotal浮动。

于 2010-09-01T20:06:28.850 回答
0

另一种方法是从 Python 3 导入除法:

>>> from __future__ import division
>>> max_sum = 14
>>> total_no = 4
>>> print max_sum / total_no  # the way you want it
3.5
>>> print max_sum // total_no
3
于 2010-09-01T20:08:32.493 回答