代码之家  ›  专栏  ›  技术社区  ›  sudo rm -rf

比较运算符未按预期工作

  •  0
  • sudo rm -rf  · 技术社区  · 14 年前

    我有一套检查来执行某些任务。

    // tempDouble is a (double), hour is an int
    
    if (tempDouble > 60.0 && (hour >= 6 || hour <= 17)) { //CLEAR
        NSLog(@"CLEAR");
    } 
    
    else if (tempDouble > 60.0 && (hour < 6 || hour > 17)) { //NIGHT_CLEAR
        NSLog(@"NIGHT_CLEAR");
    }
    
    else if (tempDouble <= 60.0 && (hour >= 6 || hour <= 17)) { //CLOUDY
        NSLog(@"CLOUDY");
    }
    
    else if (tempDouble > 60.0 && (hour < 6 || hour > 17)) { //NIGHT_CLOUDY
        NSLog(@"NIGHT_CLOUDY"); 
    }
    

    例如,当我的温度是76.3,而一个小时是2,我希望它会跳到 NIGHT_CLEAR ,但实际上是 CLEAR

    提前感谢这个简单的问题!

    2 回复  |  直到 14 年前
        1
  •  6
  •   Matthew Flaschen    14 年前
    (hour >= 6 || hour <= 17)
    

    总是真的。所有实数要么大于等于6,要么小于等于17(有些两者都是)。我想你想要:

    (hour >= 6 && hour <= 17)
    

    这同样适用于多云天气。

        2
  •  1
  •   tidwall    14 年前

    || 最好是 && 的。

    if (tempDouble > 60.0 && (hour >= 6 && hour <= 17)) { //CLEAR
        NSLog(@"CLEAR");
    } 
    
    else if (tempDouble > 60.0 && (hour < 6 && hour > 17)) { //NIGHT_CLEAR
        NSLog(@"NIGHT_CLEAR");
    }
    
    else if (tempDouble <= 60.0 && (hour >= 6 || hour <= 17)) { //CLOUDY
        NSLog(@"CLOUDY");
    }
    
    else if (tempDouble > 60.0 && (hour < 6 || hour > 17)) { //NIGHT_CLOUDY
        NSLog(@"NIGHT_CLOUDY"); 
    }