Python 2.7 在Python中对数字进行四舍五入
我正在尝试使用python中的数学模块对一个数字进行取整 所以当我这么做的时候Python 2.7 在Python中对数字进行四舍五入,python-2.7,Python 2.7,我正在尝试使用python中的数学模块对一个数字进行取整 所以当我这么做的时候 print math.ceil(21/10) 我得到了“2.0”,这是正确的 print math.ceil(27/10) 我仍然得到“2.0” 我想得到3,因为它最接近2.7 有人能建议一个解决办法吗 提前感谢。您对Python 2.x中的除法运算符感到惊讶。对于整数,它进行整数除法21/10导致2和27/10导致2 使用21.0/10和27.0/10,您将得到正确答案 在Python3.x中,如果除法不是偶数
print math.ceil(21/10)
我得到了“2.0”,这是正确的
print math.ceil(27/10)
我仍然得到“2.0”
我想得到3,因为它最接近2.7
有人能建议一个解决办法吗
提前感谢。您对Python 2.x中的除法运算符感到惊讶。对于整数,它进行整数除法
21/10
导致2
和27/10
导致2
使用21.0/10
和27.0/10
,您将得到正确答案
在Python3.x中,如果除法不是偶数(将有余数),整数的除法将自动升级为float
。在Python2.7中,您可以使用来自uuu future\uuuu.import division的来获得这种行为
顺便说一下,21/10的整数上限应该是3。问题是Python认为27/10是整数,因此计算结果为2。如果你写27/10.0,它将使它们浮动,事情将按照你的意愿运行。我想你想要一轮:
from __future__ import division
print round(27/10)
3.0
print round(21/10)
2.0
math.ceil
将始终四舍五入,round
将四舍五入
由于python2处理整数除法的方式,您只能从math.ceil(21/10)
中获得2
python2中的
21/10
是2
我想您正在寻找@Aruistante Hi,谢谢回复。但即使是打印轮(27/10)也让我得到了2.0而不是3.0:-(啊,对了,错过了Python2.7
标记。请看@steveha的答案。非常感谢。这很有效!但很奇怪。math.ceil(21/10)得到--2.0 | math.ceil(21.0/10)得到--3.0 | math.ceil(27/10)得到--2.0 | math.ceil(27.0/10)gets--3.0难道没有一个简单的方法可以得到一个完美的答案吗?如果你能提供建议,那就太好了。再次感谢非常确定21/10的整数上限应该是3
是的,是的,应该是,因为上限的全部要点是总是四舍五入。而@user3642558这与四舍五入的原因相同由于不起作用,它在2
(21和10的整数除法)上执行ceil
,即2
。这就是问题所在,21/10的上限是2.0,而21.0/10的上限是3.0,这很奇怪21/10
进行整数除法,没有余数。如果你使用divmod(21,10)
,你会得到答案(2,1)
但是使用/
你只需要得到2
。通过让至少一个数字成为浮点
你得到浮点除法,它保留一个小数部分,然后math.ceil()
有一个小数要舍入。当你得到的答案是2
,然后把它传递给math.ceil()
2
被强制为float
但没有分数。对了,哇,python总是令人惊讶!感谢所有的回答。我认为@Padraic Cunningham终于有了正确的解决方案。math.ceil(21/10.0)再次是3.0,而我们希望它是2.0:-(