为什么此示例中的内置运算符4**(1/2)
(这是一个平方根运算)返回结果1
而不是2
,因为它应该是预期的?如果不会返回一个可接受的结果,它应该会出错,但Python继续工作而没有任何崩溃。至少在Python 2.7.4 64位分发中。
数学函数pow(4,1/2)
也会发生这种情况,它会返回1
而没有错误。
相反,在执行4**(0.5)
时,它返回结果2.0
这是正确的,尽管它混合了整数和浮点数而没有任何警告。 pow也是如此。
对此行为的任何解释?他们会被视为错误吗?
答案 0 :(得分:9)
1/2
使用 floor 除法,而不是浮点除法,因为两个操作数都是整数:
>>> 1/2
0
使用浮点值,或使用from __future__ import division
切换到{3}运算符总是使用浮点除法的Python 3行为:
/
答案 1 :(得分:1)
1/2
会将0.5
作为答案,但由于它是int/int
,因此会返回int
,因此会截断.5
并返回0
}。要获得float
结果,其中任何一个数字必须为float
。因此你必须这样做:
>>> 4 ** (1.0/2)
2.0
这很有效,你也可以试试这个:
>>> math.pow(4,1.0/2)
2.0
或者你也可以试试这个:
>>> math.sqrt(4)
2.0