C++整数与浮点数的比较

C++ comparison of integers with float

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

#include <iostream>

int main(){

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

你不能像在 C 中那样进行三向比较。将其更改为以下内容即可:

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

这个if语句中的条件

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

相当于

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

因为 -1 小于 m 那么子表达式 ( -1 <= m ) 在 C 中产生 1 并且在 C++ 中产生 true 然后转换为 1 和子表达式 1 <= 0 在 C 中产生 0,在 C++ 中产生 false..

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

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

在 C++ 中 -1 <= m <= 0 等价于 (-1 <= m) <= 0.

在此示例中,-1 隐式转换为 float,以便将 <= 运算符与 m 一起使用。该表达式的结果是 bool。然后将此结果隐式转换为 int,以便将 <= 运算符与 0 一起使用。由于 bool 被转换为 01falsetrue),因此只有当 m 小于 -1.

从数学的角度来看,这样构造 if 语句是有意义的,但是您必须显式地分解它,以便编译器知道您想要什么。

试试这个

-1 <= m && m <= 0