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

如何优化价格计算逻辑中的这段if-else条件判断代码?

优化多分支if-else条件判断的简洁实现

问题描述

我编写了如下的if-else条件判断代码:

if (b != 0. && a != 0.) {
    price = (b + a) / 2;
} else if (b == 0. && a != 0.) {
    price = a;
} else if (a == 0 && b != 0.) {
    price = b;
} else if (b == 0 && a == 0. && LastPrice != 0.) {
    price = LastPrice;
} else {
    price = previous_close;
}

这段代码的逻辑如下:

  • 若b和a均不为0,则price = (b + a) / 2;
  • 若b为0但a不为0,则取a的值,反之则取b的值;
  • 若b和a均为0但LastPrice不为0,则取LastPrice的值;
  • 其余情况则取previous close的值。

觉得当前写法较为繁琐,想找更简洁、编程风格更优的实现方式。

优化方案

方案1:分层判断+提前返回(可读性优先)

通过减少嵌套层级,按逻辑优先级依次判断,符合从上到下的思考顺序,后续修改维护也更方便:

double calculatePrice(double a, double b, double LastPrice, double previous_close) {
    // 优先处理a、b都非零的核心逻辑
    if (a != 0. && b != 0.) {
        return (a + b) / 2;
    }
    // 单独非零的情况
    if (a != 0.) {
        return a;
    }
    if (b != 0.) {
        return b;
    }
    // 处理LastPrice的情况
    if (LastPrice != 0.) {
        return LastPrice;
    }
    // 兜底值
    return previous_close;
}

// 调用示例
price = calculatePrice(a, b, LastPrice, previous_close);

这种写法把每个分支拆成独立判断,没有嵌套,逻辑清晰,适合大型项目复用。

方案2:链式三元表达式(紧凑优先)

如果追求代码简洁,且逻辑足够清晰,可以用链式三元表达式压缩成一行:

price = (a != 0. && b != 0.) ? (a + b)/2 
       : (a != 0.) ? a 
       : (b != 0.) ? b 
       : (LastPrice != 0.) ? LastPrice 
       : previous_close;

注意:这种写法虽然紧凑,但如果后续逻辑扩展,可读性会下降,仅适合逻辑固定且简单的场景。

方案3:默认值逐步覆盖

先设置兜底值,再按优先级依次覆盖,也是一种简洁的写法:

price = previous_close;

if (LastPrice != 0. && a == 0. && b == 0.) {
    price = LastPrice;
} else if (a != 0. || b != 0.) {
    price = (a != 0. && b != 0.) ? (a + b)/2 : (a != 0. ? a : b);
}

关键注意点

  • 浮点数精度问题:直接用a != 0.判断浮点数是否为0存在风险,建议用精度阈值,比如fabs(a) < 1e-9,避免因浮点数存储误差导致逻辑错误。
  • 可读性优先:简洁不等于晦涩,优先选择团队成员能快速理解的写法,避免为了短代码牺牲可维护性。

内容的提问来源于stack exchange,提问作者w97802

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:05:24