在if语句中比较多组double类型数值为何返回false?
问题排查:if条件判断返回false的原因
1. 语法错误
你的if语句末尾缺少一个闭合的右括号,正确的代码写法应为:
if((aa == bb || aa2 == bb2) && (aa == cc || aa2 == cc2)) { //true } else { //false }
这个语法问题会导致编译失败,或编译器解析异常,直接影响程序执行结果。
2. 逻辑判断不符合预期
结合你给出的输入值:
- aa=1,aa2=1
- bb=2,bb2=2
- cc=1,cc2=1
条件中的(aa == bb || aa2 == bb2)部分,aa==bb是1与2比较(结果为false),aa2==bb2是1与2比较(结果也为false),因此这个子条件整体为false。而&&运算符要求所有子条件都为true时,整个表达式才为true,所以程序直接进入else分支,返回false——这是逻辑判断本身和你的预期不匹配导致的。
3. double类型直接用==比较的潜在风险
即使输入是整数,用double类型存储时,可能因浮点数的精度特性产生微小误差(比如实际存储值为1.0000000001或0.9999999999),直接用==比较会出现误判。正确的做法是设定一个极小的误差阈值(如1e-9),通过判断两个数的绝对值差是否小于阈值来确认“相等”:
#include <math.h> #define EPS 1e-9 // 修改后的条件判断 if( (fabs(aa - bb) < EPS || fabs(aa2 - bb2) < EPS) && (fabs(aa - cc) < EPS || fabs(aa2 - cc2) < EPS) )
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

