我在CoderByte上解决了一些编码挑战,不幸的是他们提供了Python2。我注意到的一件事是round()函数在python3和python2上给出了不同的输出。当我在python 2上写这个:
print int(round(100/60))
我输出1(请解释原因)
但是在python 3上,同样的命令给出2是正确的。
答案 0 :(得分:1)
在python 2中,整数上的除运算符返回整数,因此100/60==1
。这种不直观的类似C的行为在python 3中已经改变。
为了使这段代码在python 2中正常工作,您应该将其中一个整数转换为float:print int(round(100/60.))
,.
表示60.0
。
答案 1 :(得分:0)
问题不在于四舍五入,而在于/
的解释。
在python 2中,如果将2个整数除以/
,则得到整数而不是浮点数。
在python 3中,如果使用/
,则会得到一个浮点数 - 使用//
完成“纯”整数除法。
Python 2:
print(100/60) # ==> 1
print(100/60.0) # ==> 1.6666666666...
Python 3:
print (100/60) # ==> 1.6666
print (100//60) # ==> 1
它们都相应地进行了舍入,但是如果你输入一个1,那么它将导致1。
您可以在此处详细了解更改行为的原因:PEP 238
当前除法(
/
)运算符对数值参数有一个含糊不清的含义:如果参数是整数或长整数,它返回除数的数学结果的底限,但它返回除法结果的合理近似值如果参数是浮点数或复数。这使得表达式期望浮点或复杂结果在不期望整数但可能作为输入时容易出错。我们建议通过为不同的操作引入不同的运算符来解决这个问题:
x/y
返回分区的数学结果的合理近似值(“真正的除法”),x//y
返回发言权( “地板师”)。我们称之为x/y
“经典分裂”的当前混合含义。