我试图在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)
答案 0 :(得分:4)
首先,对于0到99之间的所有值,centimeter / 100
为0。默认情况下,/
是整数除法。除以100.0
以强制它为浮点除法。
其次,51 / 100.0
是0.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的倍数。
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,这是(包括你的舍入)正确的答案。