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 被转换为 0
或 1
(false
或 true
),因此只有当 m
小于 -1
.
从数学的角度来看,这样构造 if 语句是有意义的,但是您必须显式地分解它,以便编译器知道您想要什么。
试试这个
-1 <= m && m <= 0
我有以下 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 被转换为 0
或 1
(false
或 true
),因此只有当 m
小于 -1
.
从数学的角度来看,这样构造 if 语句是有意义的,但是您必须显式地分解它,以便编译器知道您想要什么。
试试这个
-1 <= m && m <= 0