Python中的圆整数

时间:2013-10-02 16:27:59

标签: python

我试图在Python中对这个整数进行舍入,但由于某种原因,如果变量等于51,它将它舍入为0.0,它应该基本上舍入为50。

这是功能代码:

def cm(centimeter):
    """Centimeter to Meters Converter!"""
    result = round(centimeter / 100, -1)
    print ("%d centimeters is the same as %d meters." % (centimeter, result))
    print (result)

6 个答案:

答案 0 :(得分:4)

首先,对于0到99之间的所有值,centimeter / 100为0。默认情况下,/是整数除法。除以100.0以强制它为浮点除法。

其次,51 / 100.00.51。要精确到-1个数字,这是0。在你已经将它除以100之后,我不确定为什么你认为它应该是50,我认为你的意思是0.5。在这种情况下你想要:

result = round(centimeter / 100.0, 1)

或许你只想在四舍五入后除以100

result = round(centimeter, -1) / 100.0

答案 1 :(得分:1)

如果您正在使用Python 2.x并传递centimeter的整数值,则应确保除法在舍入之前使用浮点值。因此,只需将100更改为100.即可。

答案 2 :(得分:1)

更改此行:

result = round(centimeter / 100, -1)

result = round(centimeter / 100., 2)  # 2 decimal places
                               ^  ^

控制台会话:

>>> round(51/100, 0)
0.0
>>> round(51/100.0, 0)
1.0
>>> round(51/100.0, -1)
0.0
>>> round(51/100.0, 2)
0.51
>>> round(51/100.0, 1)
0.5

答案 3 :(得分:1)

如果您希望它为.5,请将您的功能更改为以下

def cm(centimeter):
    """Centimeter to Meters Converter!"""
    result = round(centimeter / 100., 1)
    print ("%d centimeters is the same as %f meters." % (centimeter, result))
    print (result)

您的问题是您错误地使用了内置函数ndigits的{​​{1}}参数。 round是你传递的第二个参数是-1。在内置ndigits中,值会四舍五入到10的最接近倍数,功率减去ndigits 。这意味着它将它四舍五入到代码中最接近10 ^ 1的倍数。

Python中的

round给你0.51所以当你将0.51舍入到10 ^ 1的最接近倍数时,你显然得到0.0。

另一个问题是您尝试使用字符串格式转换51 / 100.将您的米数打印为带符号的十进制值。如果要查看%d的确切十进制值,则需要使用浮点十进制格式选项result。有关此内容的更多信息,请查看string formatting page in the docs

答案 4 :(得分:0)

厘米/ 100进行整数除法,并且对于厘米以下的值,将返回0。您需要厘米/ 100.这将返回传递给舍入的浮点数。

答案 5 :(得分:0)

尝试:

round(centimeter, -1)/100.

此操作应该给出0.5,这是(包括你的舍入)正确的答案。