Python 四舍五入问题
我在做除法的时候遇到了问题。
my max_sum = 14
total_no=4
所以当我这样做的时候
print "x :", (total_sum/total_no)
,我得到的是3,而不是3.5。
我尝试了很多方法来打印结果,但都没有成功,有人能告诉我怎么才能得到3.5这个格式吗?
谢谢!
5 个回答
把最大值设置为14.0,或者把总数设置为4.0。
你在用两个整数相除,结果也会是一个整数,这在Python 2中是这样的。你可以把其中一个数字变成小数,比如把max_sum = 14.0
或者total_no = 4.0
,这样就能得到小数结果了。
如果你想让Python 2.X在这方面表现得更直观一点,可以在你的脚本顶部加上
from __future__ import division
。在Python 3中,除法的结果就会像你预期的那样。
在Python 2.x中,两个整数相除时,默认会得到一个整数。这常常让人感到困惑,而在Python 3.x中这个问题已经解决了。你可以通过将其中一个数字转换成浮点数(float)来绕过这个问题,这样另一个数字也会自动转换:
float( 14 ) / 4 == 3.5
相关的PEP(Python增强提案)是 第238号:
当前的除法(/)运算符对于数值参数有一个模糊的含义:如果参数是整数或长整型,它会返回数学除法结果的下限值;但如果参数是浮点数或复数,它会返回一个合理的除法结果的近似值。这使得在不期望整数但可能作为输入的情况下,期望浮点数或复数结果的表达式容易出错。
在Python 2.x中没有改变这个行为是因为会有严重的向后兼容性问题,但这是Python 3.x中的一个主要变化。你可以在你的Python脚本顶部强制使用新的除法方式:
from __future__ import division
这是一种 __future__
-导入,用于强制进行语法更改,否则可能会导致你的脚本出错。还有很多其他的 __future__
导入;在准备迁移到Python 3.x时,使用这些通常是个好主意。
需要注意的是,//
运算符始终表示整数除法;如果你真的想要这种行为,应该优先使用它而不是 /
。记住,“明确比隐含更好”!