当我在Python中1/2
时为什么它会给我零?即使我用float(1/2)
强制它,我仍然得到零。为什么?我怎么能绕过它?
当我给arctan(1/2)
时,我得到0作为答案,但当我给arctan(.5)
时,我得到了正确答案!
答案 0 :(得分:7)
因为Python 2.x对整数使用整数除法,所以:
1/2 == 0
评估为True。
你想这样做:
1.0/2
或做一个
from __future__ import division
答案 1 :(得分:6)
首先,1/2
是整数除法。直到Python 3.0。
>>> 1/2
0
>>> 1.0/2.0
0.5
>>>
其次,使用math.atan2
来做这类事情。
>>> math.atan2(1,2)
0.46364760900080609
>>> math.atan(.5)
0.46364760900080609
答案 2 :(得分:3)
atan(float(1)/2)
如果你这样做:
atan(float(1/2))
在Python 2.x中,但没有:
from __future__ import division
首先将1/2评估为0,然后将0转换为浮点数,然后调用atan(0.0)。这在Python 3中发生了变化,默认情况下,即使对于整数也使用浮点除法。简单的便携式解决方案是我最初提供的。
答案 3 :(得分:2)
float(1)/float(2)
如果你划分int / int你得到一个int,所以float(0)仍然给你0.0
答案 4 :(得分:2)
来自标准:
/(division)和//(floor division)运算符产生其参数的商。数字参数首先转换为通用类型。普通或长整数除法产生相同类型的整数;结果是数学除法的结果,“floor”函数应用于结果。
答案 5 :(得分:1)
正如这些答案所暗示的那样,1/2不会返回你所期望的。它返回零,因为1和2是整数(整数除法导致数字向下舍入)。顺便说一句,Python 3改变了这种行为。
答案 6 :(得分:1)
你的胁迫没有机会,因为在你把它交给浮动之前答案已经为零了。
尝试1./2
答案 7 :(得分:1)
在Python中,除以整数会产生一个整数 - 在这种情况下为0。
有两种可能的解决方案。一个是强迫它们浮动:1/2。 (注意尾随点)或float(1)/ 2。
另一种方法是在代码顶部使用“来自 future 导入部门”,并使用您需要的行为。
来自未来导入部门的python -c';导入数学;打印math.atan(1/2)'产生正确的0.463647609001
答案 8 :(得分:1)
如果1/2 == 0则浮点数(1/2)将为0.0。
,如果你在被截断后强制它浮动,它仍会被截断。有几个选择:
from __future__ import division
。这将使/运算符在该模块中“正确”划分。如果需要截断分区,可以使用//。float(1)/2
1.0/2
或1/2.0
或1.0/2.0