报表统计的加减运算实现

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

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;
}


相关文章
|
3月前
|
JavaScript 前端开发 大数据
数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。
数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。
|
2天前
|
TensorFlow 算法框架/工具 Python
基于维度的算术操作
【8月更文挑战第18天】基于维度的算术操作。
6 2
|
2月前
数字逻辑与模拟电子技术-部分知识点(3)——数电部分-基本逻辑运算、复合逻辑运算
数字逻辑与模拟电子技术-部分知识点(3)——数电部分-基本逻辑运算、复合逻辑运算
46 0
|
3月前
|
机器学习/深度学习 存储 算法
位运算是一种什么运算方式
位运算是一种什么运算方式
29 1
|
10月前
|
存储 算法 数据处理
数据的表示及运算
一、数据的表示及运算 数据的表示和运算是计算机系统中非常重要的概念,它们决定了计算机如何处理和操作数据。 1. 数据的表示:计算机使用二进制(0和1)来表示和存储数据。二进制是一种只有两个状态的编码方式,可以通过开关电路的开和关来表示0和1。计算机将二进制编码与不同的数据类型关联,例如整数、浮点数、字符等。 2. 整数运算:计算机可以对整数进行基本的算术运算,包括加法、减法、乘法和除法。这些运算是通过电子电路中的逻辑门实现的,逻辑门可以对二进制数进行逻辑运算和移位操作。 3. 浮点数运算:计算机可以进行浮点数的运算,浮点数是一种用于表示带有小数部分的数值的数据类型。浮点数运算涉及到浮点数的表示
65 0
|
3月前
|
存储
运算和统计
运算和统计
|
3月前
leetcode-592:分数加减运算
leetcode-592:分数加减运算
34 0
|
10月前
加减运算电路的介绍
加减运算电路 引言: 加减运算电路是计算机中常见的一种电路,它能够对数字进行加法和减法运算。本文将介绍加减运算电路的原理、设计和应用。 一、加法运算电路 加法运算电路是实现数字加法的关键部分。它能够将两个二进制数相加,并输出它们的和。 1. 半加器 半加器是加法运算电路的基本单元。它能够对两个二进制位进行加法运算,并输出它们的和与进位。半加器的逻辑电路图如下: (图1:半加器逻辑电路图) 半加器的真值表如下: (表1:半加器真值表) 从真值表可以看出,半加器的和输出位等于两个输入位的异或运算结果,进位输出位等于两个输入位的与运算结果。 2. 全加器 全加器是由两个半加器组成的加
251 0
|
11月前
|
数据采集 数据挖掘 索引
pandas数据分析之数据运算(逻辑运算、算术运算、统计运算、自定义运算)
数据分析离不开数据运算,在介绍完pandas的数据加载、排序和排名、数据清洗之后,本文通过实例来介绍pandas的常用数据运算,包括逻辑运算、算术运算、统计运算及自定义运算。
270 0