2011-04-11 121 views
0

我有這樣的代碼:比較INT浮動蟒蛇問題

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,然後在例外評估爲假

我正在運行python 2.6.6

+1

因爲您在此更改'p1.y'(通過'p.y')? 'p.y = w.y1 if m&0x10 else w.y2-1' – Amber 2011-04-11 04:06:55

+0

thanks琥珀,完全錯過了: – titus 2011-04-11 04:14:42

回答

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: