python 比较 int float 问题

发布于 2024-10-31 15:06:27 字数 589 浏览 3 评论 0原文

我有这样的代码:

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

I have this code:

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

The output is:

cannot convert float NaN to integer  
False  
199 199.0

I have no idea why p1.y!=p2.y evaluates to true and then in the exception it evaluates to false

I'm running python 2.6.6

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

睫毛上残留的泪 2024-11-07 15:06:27

您正在除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 > 我相信这就是为什么你会收到错误无法将浮点NaN转换为整数而不是ZeroDivisionError:整数除法或以零为模

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

You are dividing 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

This means

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

Now we are devising 0 by this:

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

So in this case you are trying to do 0/0

Then at the end of the whole thing you try to add p2.x and i believe thats why you get the error cannot convert float NaN to integer and not ZeroDivisionError: integer division or modulo by zero

Its really easy to solve. change if p1.y!=p2.y: line 4 to If p1.y-p2.y != 0:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文