ios int to float比较总是计算为true

时间:2012-10-13 00:43:39

标签: objective-c ios

我试图将CGFloat与整数值进行比较。基于此值,执行条件...漂亮标准。但是,出于某种原因,这总是正确的。我甚至打印出值,它们显然小于800 ....我尝试了一堆不同的组合,最近的显示如下,我想也许是比较浮点数的大小和基于int的大小纯粹基于它的二进制值,所以我尝试了这个冒险的小型演员操作......任何想法?

CGPoint textViewPoint = [scroller convertPoint:[textView center] toView:(UIView *)self.view];
        NSLog(@"the y coord is %f", textViewPoint.y);

    int size = (int)textViewPoint.y;
    NSLog(@"the yint %d", size);
    //move the main view, so that the keyboard does not hide it.
    //if  (self.scroller.frame.origin.y >= 0 && textViewPoint.y > 800.0);
    if(size > 800);
    {
        NSLog(@"moving up");

1 个答案:

答案 0 :(得分:4)

问题是;行末尾的if(size > 800);,而不是int与float的比较。删除它,一切都应该没问题。

这是因为这个分号被解释为if语句的主体,这是条件为真时执行的NO-OP语句。然后,此if空主体旁边的其​​余代码位于if主体之外,因此无论条件值如何都会执行。这就像你写的那样:

if(size > 800)
{
}
{
    NSLog(@"moving up");
}

编译器警告提示

编译器通常会警告您这个错误。确保您在项目构建设置(编译器标记-Wempty-body)中激活了“空循环体”警告:这样下次出现此错误时,您将收到警告关于它,并将知道什么是错的以及如何解决它。