我在Python中使用math.atan时出错!

时间:2009-06-14 17:34:19

标签: python

当我在Python中1/2时为什么它会给我零?即使我用float(1/2)强制它,我仍然得到零。为什么?我怎么能绕过它?

当我给arctan(1/2)时,我得到0作为答案,但当我给arctan(.5)时,我得到了正确答案!

9 个答案:

答案 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
  • 如果您实际使用常量,则只需添加小数点而不是使用float(),例如:1.0/21/2.01.0/2.0