1. 概述
1.1 问题描述
在报表设计时,若使用除法运算,可能涉及到「除数」或「被除数」为 0 的情况,此时默认 FineReport 的计算规则如下表所示:
被除数 | 除数 | 商 |
---|---|---|
0 | 非 0 | 0 |
非 0 | 0 | ∞ 或 -∞ |
0 | 0 | 0 |
这样显示没有错,但在实际应用中,经常需要对「除数为 0 」或者「除数被除数均为 0」 的情况进行处理,希望在这两种情况下提示「无法计算」或避免结果为「无穷大」。如下图所示:
1.2 解决思路
使用 IF 公式判断除数与被除数是否均为 0,为 0 时提示“can’t calculate”。
使用「条件属性新值」修改结果为「无穷大」的值。
2. 示例
2.1 准备数据
新建普通报表,新建内置数据集 Embedded1,添加「被除数」和「除数」两个「整数」类型的字段,填入一些整数,如下图所示:
2.2 设计报表
将「被除数」和「除数」分别拖入 A2、B2 单元格,将 A2 单元格的「数据设置」修改为「列表」。在 C2 单元格插入「商」的公式:A2/B2。表格样式如下图所示:
此时预览报表,是使用 FineReport 默认的计算规则。结果如下图所示
2.3 设置公式
2.3.1 被除数与除数均为 0
被除数和除数均为 0 时,实际应用中除数显示“can’t calculate”,否则计算 A2/B2。此时可将 C2 单元格的公式改为:IF(A2=0&&B2=0,"can't calculate",A2/B2),结果如下图所示:
2.3.2 除数为 0
除数为 0 时,商为「无穷大」,希望不需要计算,否则计算 A2/B2,可使用公式:IF(B2=0,"0",A2/B2),结果就显示为 0 了。在本例中,可将 C2 单元格的公式修改为:IF(A2=0&&B2=0,"can't calculate",IF(B2=0,"0",A2/B2))。结果如下图所示:
2.4 设置条件属性新值
当商为「无穷大」时,无穷大 ∞ 对应的真实值其实是 Infinity ,可以利用「条件属性>新值」改变单元格值。
注:Infinity 首字母必须大写,小写无效。
选中 C2 单元格,点击右侧属性面板,添加一个条件属性,选择「新值」属性,设置值为「字符串」 0 (可根据情况选择其他值类型)。添加两个「普通」条件,用 OR 连接,即当单元格值为 Infinity (∞)或 -Infinity (-∞)时,单元格值改变为 0。
如下图所示:
这样做的一个好处是利用条件属性可以批量设置,也就是说在模板中出现多个可能计算结果为无穷大的地方,我们只需要全部选中,右键选择条件属性,即可以一次性设置成功,不需要反复利用 IF 公式来判断了,可以省下很多时间,大大提高我们的开发效率。
2.5 效果预览
2.5.1 PC 端
保存模板,效果与 1.1 节中相同。
2.5.2 移动端
App 与 HTML5 端效果相同,如下图所示:
3. 模板下载
点击下载模板:除数被除数为零时的处理.cpt