Skip to content

计算公式专题:「逻辑函数」

逻辑函数 是一类返回值为 真(true)/ 假(false) 的函数。

注意

在逻辑函数中,部分字段类型存在特别含义
0、空值(null)、未定义(undefined) 代表 假(false)
非0数值、文本、数组 代表 真(true)

1. IF

函数格式IF(条件, 表达式1, 表达式2)

功能说明 :若条件为真,则执行表达式1,否则执行表达式2

参数

  • 条件 :能得到 真(true)假(false) 两种结果之一的表达式

“条件”举例

  1. 花费金额 > 60:当 金额 为 70 时,结果为 真(true)
  2. 姓名 == "小李":仅当 姓名 值为 小李 时,才为 真(true)
  3. IF(幸运数 > 60, 幸运数, 幸运数 + 60):函数可嵌套,函数也可以作为 条件 本身
  4. 年龄:只要 年龄 不为0,结果就不为 假(false)
  • 表达式1,表达式2:数值 / 文本 / 基础运算,例如 1 + 2 / 其他自定义函数

IF函数举例

  1. IF(花费金额 > 60, 花费金额 * 0.8, 花费金额):仅当 花费金额 超过 60 时,打八折;否则不打折
  2. IF(姓名 == "小李", "到", "做作业"):仅当老师叫到 小李 的姓名后,才回复 ;否则继续做作业
  3. IF(IF(幸运数 > 60, 幸运数, 幸运数 + 60) < 80, "中奖", "重在参与")幸运数 在 60-80 区间内,可以直接获奖;如果 幸运数 不大于 60,则为其增加 60,结果仍然小于 80 时,也可中奖
  4. IF(年龄, YEAR(当前日期) - 年龄, YEAR(当前日期)):依据 年龄 粗略倒推出生年份;年龄为0时,返回今年年份

使用举例

  • 当存在库存数量的时候,对外告知“可下单”;否则,贴出“已售罄”的告示
  • 如果输入了年龄,则粗略估计出生年份

2. IFS

提示

IFS 属于 IF 函数的变体,具备判断多个条件的功能,其余方面与 IF 无异

函数格式IFS(条件1, 表达式1, 条件2, 表达式2, ......)

功能说明 :逐个判断 条件,返回第一个 真条件 后的 表达式 的结果。

参数

  • 条件x :能得到 真(true)假(false) 两种结果之一的表达式,
  • 表达式x:数值 / 文本 / 基础运算,例如 1 + 2 / 其他自定义函数

条件x, 表达式x

IFS 中的参数需要 成对 看待:
条件1 为真,则返回 表达式1 的结果,并中止后续执行;否则执行后一判断;
条件2 为真,则返回 表达式2 的结果,并中止后续执行;否则执行后一判断;
...以此类推。

使用举例

  • 根据成绩分数所在区间,来判断最终评价

条件的位置变化,会改变输出

若上图将 成绩分数 >= 60, "合格"成绩分数 >= 75, "良好" 交换位置,变换后如下:

IFS(成绩分数 >= 90, "优秀", 成绩分数 >= 60, "合格", 成绩分数 >= 75, "良好", 成绩分数 < 60, "不合格")

则输入 76 的判断结果为 合格 而不是 良好。这个结果并非预期,但符合 IFS 执行逻辑。

  • 依据用电量分段计费电费,假设用电量越少,单位度数电费越贵。
  • 不同抽奖方式(例如,刮刮乐和大转盘)的相同奖项(一等、二等...)分别对应不同的金额

3. CONTAIN

函数格式CONTAIN(数组1, 数组2)

功能说明 :判断 数组2 是否为 数组1 的子集。

参数

  • 数组1,数组2 : 数组内元素为文本 / 数值。

使用举例

4. BELONG

函数格式 BELONG(数组1, 数组2)

功能说明 :判断 数组1 是否为 数组2 的子集

提示

功能上与 CONTAIN 函数完全一致,仅参数位置互换。
CONTAIN(计划采购, 实际采购) 等同于 BELONG(实际采购, 计划采购)
含义均为:实际采购物品全都属于计划采购的物品吗?

参数

  • 数组1,数组2 : 数组内元素为文本 / 数值。

使用举例

4. IS_EMPTY

函数格式IS_EMPTY(参数)

功能说明 :当 参数 为空时返回

参数 :数值 / 文本 / 数组

使用举例

  1. 当表单中存在必填项,且另一个控件需要根据必填项的填写情况,来做出对应的行为,可参考此示例:

5. IS_EXIST

函数格式IS_EXIST(参数)

功能说明 :当 参数 不为空时返回 ,使用方式与 IS_EMPTY 完全一致,但返回值 相反 的函数。

参数 :数值 / 文本 / 数组 / 其他函数

使用举例

  1. IS_EMPTY(100) 返回 ,而 IS_EXIST(100) 返回
  2. 保持功能相同,使用 IS_EXIST 改写 IS_EMPTY 中的例子
js
IF(IS_EXIST(必填项), "已填写", "未填写")
// 等价于
IF(IS_EMPTY(必填项), "未填写", "已填写")

6. NOT

函数格式NOT(条件)

功能说明 :对 条件相反 结果

参数 :数值 / 文本 / 数组 / 逻辑函数

使用举例

  1. IF(NOT(残次品数量 == 0), "发出告警", "持续运转") :当出现 残次品 时,发出告警;

7. AND

函数格式AND(条件1, 条件2, ...)

功能说明 :当 所有 条件均为 真(true) 时,返回 真(true)

参数 :数值 / 文本 / 数组 / 逻辑函数

使用举例

8. OR

函数格式OR(条件1, 条件2, ...)

功能说明 :当 任意 条件为 真(true) 时,返回 真(true)

参数 :数值 / 文本 / 数组 / 逻辑函数

使用举例

  • AND 函数的示例中,将 AND 换为 OR综合评价 便是 合格
    • 替换后的公式: IF(AND(语文 > 60, 数学 > 60), "合格", "不合格")
    • 即,只要有一门功课的分数大于60,综合评价便可视为合格

提示

使用方式与 AND 完全一致,且 条件 至少有两个的情况下,返回结果不同。

9. TRUE | FALSE

函数格式TRUE() | FALSE()

功能说明 :返回 真(true) | 假(false),通常与其他函数配合使用,几乎没有单独使用的场景。

参数 :无

使用举例

  • 同意并接受协议判断举例,含义如下:
    • 若勾选是,则 接受 显示true,拒绝 显示false
    • 若勾选否,则 接受 显示false,拒绝 显示true
    • 若均未勾选,则控件 同意并接受协议 值为 空(null),他不等于 false 或 true ,所以计算结果均为false

注意

虽然 IF | IFS 等函数将 空值(null) 等价为 false, 但是 false 本身与 空值(NULL) 是不相等的

10. 嵌套举例

更多案例

这里会存放一些相对简单的案例,复杂或常用案例可以移步至 常用公式举例 查阅。

  • 以下公式相对较长,遂调整 排版 方便阅读
  • 部分场景会提供 IFSIF 等价的实现

提示

同一个场景描述不一定只有一个公式,以下均为实现对应需求的公式之一

10.1 IFS / IF

  1. 会员等级制消费与全店叠加折扣,折上折
  • 若为初级会员,则打 9 折
  • 若为中级会员,则打 8 折
  • 若为高级会员,则打 7 折
  • 若启动全店促销,则额外打 8 折
  • 非会员仅能参与节日促销
JS
IF(
  是否启用全店促销,
  IFS(
    会员等级 == "非会员", 1,
    会员等级 == "初级会员", 0.9,
    会员等级 == "中级会员", 0.8,
    会员等级 == "高级会员", 0.7,
  ) * 消费总额 * 0.8,
  消费总额
)

10.2 IF / CONTAIN / BELONG

  1. 店家解谜活动,如果购买了答案商品,则对总消费金额打折
  • 此处假设答案商品是 "苹果"
JS
IF(
  CONTAIN(购物商品清单, ["苹果"]), 消费总额 * 0.7, 消费总额
)
  • 使用 BELONG 改写
JS
IF(
  BELONG(["苹果"], 购物商品清单), 消费总额 * 0.7, 消费总额
)

10.3 IFS / IS_EMPTY

  1. 选课系统,根据年级不同,自动给出对应选修列表
  • 一年级,给出乒乓球、羽毛球
  • 二年级,给出跨栏、足球
  • 三年级,给出太极、健美操
  • 未选择,给出提示信息
JS
IFS(
  年级 == "一年级", ["乒乓球", "羽毛球"],
  年级 == "二年级", ["跨栏", "足球"],
  年级 == "三年级", ["太极", "健美操"],
  IS_EMPTY(年级), "请选择年级"
)

10.4 IF / AND / OR / IFS

  1. 当且仅当主课目(语数外)全部及格,副课目(理化生)一门及格,综合评价便视为合格;否则不合格
JS
IF(
    AND(
        AND(语文 >= 60, 数学 >= 60, 外语 >= 60),
        OR(物理 >= 60, 化学 >= 60, 生物 >= 60)
    ),
    "合格", "不合格"
)
  • 使用 IFS 改写公式
JS
IFS(
  OR(
    物理 < 60, "不合格",
    化学 < 60, "不合格",
    生物 < 60, "不合格",
  ),
  语文 < 60, "不合格",
  数学 < 60, "不合格",
  外语 < 60, "不合格",
  外语 >= 60, "合格"
)

10.5 IF / OR / IS_EMPTY / AND / IS_EXIST

  1. 税额计算
  • 当总价格不存在,返回 0,此时税率是否存在无意义
  • 当总价格存在,但总价格不大于 0,返回 0
  • 当总价格存在,总价格大于 0,但税率不存在,或者税率不位于 (0, 1],区间时,返回 -1
  • 否则,说明总价格与税率同时存在,且总价格大于 0,税率位于区间 (0, 1] 时,执行折扣计算;
JS
IF(
    IS_EMPTY(总价格), 0,
    IF(
        总价格 <= 0, 0,
        IF(
            OR(
                IS_EMPTY(税率), 税率 < 0, 税率 > 1
            ), -1, 总价格 * 税率
        )
    )
)
  • 使用 IS_EXISTAND 改写
JS
IF(
  IS_EXIST(总价格),
  IF(
    总价格 > 0,
    IF(
      AND(
        IS_EXIST(税率), 税率 > 0, 税率 < 1
      ), 总价格 * 税率, -1
    ), 0
  ), 0
)