【问题标题】:comparing int float python problem比较int float python问题
【发布时间】:2011-09-12 13:49:41
【问题描述】:

我有这个代码:

def fit(self,p1,p2,w):
    p=p1    
    m=self.bit(p,w)
    if p1.y!=p2.y:
        if m&0x30:
            p.y=w.y1 if m&0x10 else w.y2-1
            try:
                p.x=int((p.y-p2.y)*(p1.x-p2.x)/(p1.y-p2.y)+p2.x)
            except Exception,e:
                print e
                print p1.y!=p2.y        
                print p1.y,p2.y

输出是:

cannot convert float NaN to integer  
False  
199 199.0

我不知道为什么 p1.y!=p2.y 评估为 true,然后在异常中评估为 false

我正在运行 python 2.6.6

【问题讨论】:

  • 因为你在这里更改了p1.y(通过p.y)? p.y=w.y1 if m&0x10 else w.y2-1
  • 感谢 Amber,完全错过了:|

标签: python divide-by-zero


【解决方案1】:

你在分割0/0

# (p.y-p2.y)*(p1.x-p2.x)
x = p.y - p2.y
x = 199 - 199.0 = 0
x1 = p1.x-p2.x
0 * x1 = 0* p1.x - 0* p2.x

这意味着

(p.y-p2.y)*(p1.x-p2.x) = 0

现在我们正在设计 0:

#(p1.y-p2.y)
p1.y-p2.y
x = p.y - p2.y
x = 199 - 199.0 = 0

所以在这种情况下,你正在尝试做0/0

然后在整个事情的最后你尝试添加p2.x,我相信这就是为什么你得到错误cannot convert float NaN to integer而不是ZeroDivisionError: integer division or modulo by zero

这真的很容易解决。将 if p1.y!=p2.y: 第 4 行更改为 If p1.y-p2.y != 0:

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多