You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:30:52