整数与float的C ++比较

时间:2017-01-15 21:30:58

标签: c++ floating-point integer comparison-operators

我有以下代码。它说明了我遇到的问题。为什么比较不评估为真?这是整数和浮点比较的限制吗?

#include <iostream>

int main(){

    double m = -0.625;
    if((-1)<=m<=0){
        std::cout << "Enter here" <<std::endl;
    }
    return 0;
}

3 个答案:

答案 0 :(得分:2)

你不能像在C中那样进行三方比较。将它改为以下,它将起作用:

if((-1) <= m && m <= 0){
        std::cout << "Enter here" <<std::endl;
    }

答案 1 :(得分:0)

此if语句中的条件

if( ( -1 ) <= m <= 0 ){

相当于

if( ( -1 <= m ) < = 0 ){

-1小于m时,子表达式( -1 <= m )在C中产生1,在C ++中产生true,然后转换为1,子表达式{{1}在C中产生1 <= 0,在C ++中产生0 ..

要获得预期的结果,您应该改为编写

false

答案 2 :(得分:0)

在C ++中-1 <= m <= 0相当于(-1 <= m) <= 0

在此示例中,-1被隐式转换为float,以便将<=运算符与m一起使用。该表达式的结果是bool。然后,此结果会隐式转换为int,以便将<=运算符与0一起使用。由于bool转换为01falsetrue),因此当m小于{{{}时,此条件语句才会生效1}}。

从数学的角度来看,构造if语句是有道理的,但是你必须明确地将其分解,以便编译器知道你想要什么。

试试这个

-1