报表统计的加减运算实现

简介: 报表统计的加减运算实现

1.报表统计需求的例子



在做报表的时候会遇到一些统计:
    如果是合计的可以直接在sql统计的时候直接运算
    如果是上级科目为子科目之和的时候,明细表没有自动处理父级科目
       则可以通过子sql的like处理 a.subjectcode like b.subjectcode||'%'
       也可以通过代码遍历处理只要是科目开头匹配的时候就加
    如果是动态的一些合计为明细加加减减的可以采用配置表达式方式处理
设计表达式例子:
例如明细
       科目:金额
       1.1.1 1
       1.1.2 2
       1.1.3 3
       1.1.4 4
统计要求为多个明细之间的加减运算,可以通过配置表达式处理
   表达式配置例如:
                1.1=1.1.1+1.1.2-1.1.4
                1.2=1.1.2-1.1.3
   大科目统计例如:
                1=1.1+1.2
                只需要按照顺序计算就可以了,因为表达式的明细前面做过运算,这里直接处理就可以了
复制代码


2.效果



网络异常,图片无法展示
|


3.实现



例如 -1.1+1.4-1.6
首先加号分组 (-1.1) (1.4-1.6)
遇见减号分组 (空 1.1)
            1.1不为首个匹配数做减法运算
                 (1.4 1.6)
                 1.4为首个运算做加法运算
                 1.6不为首个运算减法运算
复制代码


//测试
public static void main(String[] args) {
  Map<String, BigDecimal> detail=new HashMap<String, BigDecimal>();
  detail.put("1.1", new BigDecimal(1));
  detail.put("1.2", new BigDecimal(2));
  detail.put("1.3", new BigDecimal(3));
  detail.put("1.4", new BigDecimal(4));
  detail.put("1.5", new BigDecimal(5));
  detail.put("1.6", new BigDecimal(6));
  String express1="-1.1+1.4-1.6";
  System.out.println(getAddSub(express1,detail));
         express1="+1.1+1.4-1.6";
  System.out.println(getAddSub(express1,detail));
            express1="1.1+1.4-1.6-";
  System.out.println(getAddSub(express1,detail));
    express1="1.1+1.4-1.6-1.7";
  System.out.println(getAddSub(express1,detail));
}
public static BigDecimal getAddSub(String express,Map<String, BigDecimal> detail) {
  BigDecimal result=new BigDecimal(0);
  String[] expressAdd=express.split("\\+");
  for(String add:expressAdd) {
    String[] expressSub=add.split("\\-");
    for(int i=0;i<expressSub.length;i++) {
      String key=expressSub[i];
      if(detail.containsKey(key)) {
        if(i==0) {
          result=result.add(detail.get(key));
        }else {
          result=result.subtract(detail.get(key));
        }
      }
    }
  }
  return result;
}


相关文章
|
1月前
实现加减乘除计算
【10月更文挑战第26天】实现加减乘除计算。
66 7
|
6月前
1034 有理数四则运算 (20 分)
1034 有理数四则运算 (20 分)
|
7月前
|
存储 算法
计算器——可支持小数的任意四则运算(中缀表达式转为后缀表达式算法)
计算器——可支持小数的任意四则运算(中缀表达式转为后缀表达式算法)
75 1
|
7月前
|
存储
运算和统计
运算和统计
|
7月前
leetcode-592:分数加减运算
leetcode-592:分数加减运算
60 0
|
数据采集 数据挖掘 索引
pandas数据分析之数据运算(逻辑运算、算术运算、统计运算、自定义运算)
数据分析离不开数据运算,在介绍完pandas的数据加载、排序和排名、数据清洗之后,本文通过实例来介绍pandas的常用数据运算,包括逻辑运算、算术运算、统计运算及自定义运算。
463 0
加减运算电路的介绍
加减运算电路 引言: 加减运算电路是计算机中常见的一种电路,它能够对数字进行加法和减法运算。本文将介绍加减运算电路的原理、设计和应用。 一、加法运算电路 加法运算电路是实现数字加法的关键部分。它能够将两个二进制数相加,并输出它们的和。 1. 半加器 半加器是加法运算电路的基本单元。它能够对两个二进制位进行加法运算,并输出它们的和与进位。半加器的逻辑电路图如下: (图1:半加器逻辑电路图) 半加器的真值表如下: (表1:半加器真值表) 从真值表可以看出,半加器的和输出位等于两个输入位的异或运算结果,进位输出位等于两个输入位的与运算结果。 2. 全加器 全加器是由两个半加器组成的加
380 0
|
C语言 C++
C语言经典实例:1-10例:三角求和、显示所占字节数、自增自减运算while语句输出最小值、计算快递费用、学生成绩统计
C语言经典实例:1-10例:三角求和、显示所占字节数、自增自减运算while语句输出最小值、计算快递费用、学生成绩统计
C语言经典实例:1-10例:三角求和、显示所占字节数、自增自减运算while语句输出最小值、计算快递费用、学生成绩统计