0

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

这是功能代码:

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)
4

6 回答 6

4

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

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

result = round(centimeter / 100.0, 1)

或者,也许您只是想在四舍五入除以 100 :

result = round(centimeter, -1) / 100.0
于 2013-10-02T16:32:45.970 回答
1

如果您使用 Python 2.x 并为 传递整数值centimeter,则应确保在舍入之前除法使用浮点数。所以只需更改100100.它应该可以工作。

于 2013-10-02T16:32:26.477 回答
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
于 2013-10-02T16:33:44.053 回答
1

如果您希望它为 0.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了内置函数的参数roundndigits你传入的第二个参数是-1。在 built-in 中round,值被四舍五入到最接近的 10 的幂减去 ndigits的倍数。这意味着它将它四舍五入到代码中最接近的 10^1 倍数。

51 / 100.在 Python 中为您提供 0.51,因此当您将 0.51 舍入到最接近的 10^1 倍数时,您显然得到了 0.0。

另一个问题是您试图使用字符串格式转换将您的米数打印为带符号的十进制值%d。如果您想查看 的确切十进制值result,您需要使用浮点十进制格式选项,即%f. 有关这些内容的更多信息,请查看文档中的字符串格式化页面

于 2013-10-02T16:36:45.613 回答
0

cm/100 进行整数除法,对于低于 100 的 cm 值将返回 0。您需要 cm/100。这将返回一个传递给 round 的浮点数。

于 2013-10-02T16:32:25.063 回答
0

尝试:

round(centimeter, -1)/100.

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

于 2013-10-02T16:39:26.167 回答