• java 计算年增长率 案例


    计算年度增长率:
    增长率公式: (a-b)b*100+'%'   =》(前面的数字-后面的数字)/后面的数字*100

    package cn.demo;
    import org.apache.commons.collections.CollectionUtils;
    import java.util.ArrayList;
    import java.util.List;

    /**
    * @author Administrator
    * @date 2020/7/31
    */
    public class GrowthRateDemo {
    /**
    * 初始化数据
    * @return
    */
    public static List<PersonInfo> getPerson(){
    List<PersonInfo> list=new ArrayList<>();

    PersonInfo personInfo=new PersonInfo();
    personInfo.setCountNumber(100);
    personInfo.setCreateTime("2016");

    PersonInfo personInfo2=new PersonInfo();
    personInfo2.setCountNumber(450);
    personInfo2.setCreateTime("2017");

    PersonInfo personInfo4=new PersonInfo();
    personInfo4.setCountNumber(22);
    personInfo4.setCreateTime("2018");

    PersonInfo personInfo5=new PersonInfo();
    personInfo5.setCountNumber(100);
    personInfo5.setCreateTime("2019");

    PersonInfo personInfo6=new PersonInfo();
    personInfo6.setCountNumber(200);
    personInfo6.setCreateTime("2020");

    list.add(personInfo);
    list.add(personInfo2);
    list.add(personInfo4);
    list.add(personInfo5);
    list.add(personInfo6);
    return list;
    }

    /**
    * 计算年度增长率
    * <p>
    * 以年度分组
    * <p>
    * 增长率: (a-b)b*100+'%' =》(前面的数字-后面的数字)/后面的数字*100
    */
    public static List<PersonInfo> getAnalysisData(){
    List<PersonInfo> result =new ArrayList<>();
    List<PersonInfo> person2 =new ArrayList<>();
    List<PersonInfo> person0=new ArrayList<>();

    List<PersonInfo> person = getPerson();
    //第1项
    PersonInfo personInfo0 = person.get(0);
    personInfo0.setGrowthRate("0%");
    person0.add(personInfo0);

    //第一项不做比较
    if (CollectionUtils.isNotEmpty(person)){
    for (int i = 1; i < person.size(); i++) {
    PersonInfo personInfo=new PersonInfo();
    Integer countNumber = person.get(i).getCountNumber();
    Integer countNumber1 = person.get(i - 1).getCountNumber();
    if (countNumber<countNumber1){
    //如果下个数大于上个数,则增长率 为 正
    String growthRate=(countNumber1-countNumber)/countNumber*100+"%";
    personInfo.setGrowthRate("-"+growthRate);
                    }else if (countNumber>countNumber1){
    //如果下个数小于上个数,则增长率 为 负
    String growthRate= (countNumber-countNumber1)/countNumber1*100+"%";
    personInfo.setGrowthRate(growthRate);
    }else{
    //如果相等,增长率为 0
    personInfo.setGrowthRate("0%");
    }
    personInfo.setCountNumber(person.get(i).getCountNumber());
    personInfo.setCreateTime(person.get(i).getCreateTime());
    person2.add(personInfo);
    }
    }
    //list合并
    result.addAll(person0);
    result.addAll(person2);
    return result;
    }


    public static void main(String[] args) {
    List<PersonInfo> analysisData = getAnalysisData();
    if (CollectionUtils.isNotEmpty(analysisData)){
    analysisData.stream().forEach(item->{
    System.out.println("数量:"+item.getCountNumber());
    System.out.println("增长率:"+item.getGrowthRate());
    System.out.println("时间:"+item.getCreateTime());
    System.out.println("*****************************************************");
    });
    }
    }
    }

     

    工具类

    package cn.demo;
    
    import java.math.BigDecimal;
    
    /**
     * 求增长率
     */
    public class GrowthRate {
        public String percentBigDecimal(BigDecimal preNum, BigDecimal sufNum){
            double result = countDecimal(preNum,sufNum);
            if(result>0){
                return "+"+result+"%";
            }
            if(result<0){
                return result+"%";
            }
            if(result==0){
                return "+"+0+"%";
            }
            return null;
        }
        public  double countDecimal(BigDecimal preNum,BigDecimal sufNum){
            boolean preBoolean = verifyNum(preNum);
            boolean sufBoolean = verifyNum(sufNum);
            //同时为true计算
            if(preBoolean && sufBoolean){
                boolean b = verifyEqual(preNum, sufNum);
                if (b == false){
                    return realCountDecimal(preNum,sufNum);
                }
                if (b){
                    return 0;
                }
            }
            if(preBoolean == false && sufBoolean ==false){
                return 0;
            }
            if(sufBoolean ==false){
                return 100;
            }
            return  0;
        }
        //验证数字是否为零和null
        public boolean verifyNum(BigDecimal num){
            if(null !=num && num.compareTo(BigDecimal.ZERO)!=0 ){
                return true;
            }
            return false;
        }
    
        //验证两个数字是否相等
        public boolean verifyEqual(BigDecimal preNum,BigDecimal sufNum){
            int n = preNum.compareTo(sufNum);
            //比较 -1 小于   0 等于    1 大于
            if(n==0){
                return true;
            }
            return false;
        }
        //真正计算
        public double realCountDecimal(BigDecimal preNum,BigDecimal sufNum){
            //(前面的数字-后面的数字)/后面的数字*100
            BigDecimal bigDecimal = (preNum.subtract(sufNum)).divide(sufNum).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_UP);
            if (bigDecimal.compareTo(BigDecimal.ZERO) !=0){
                return  bigDecimal.doubleValue();
            }
            return 0;
        }
    
        public static void main(String[] args) {
            GrowthRate p = new GrowthRate();
            BigDecimal a = new BigDecimal("3");
            BigDecimal b = new BigDecimal("2");
            String percent = p.percentBigDecimal(a, b);
            System.out.println(percent);
        }
    
    }
  • 相关阅读:
    透视表提取不反复记录(1)-出现值
    ORA-38760: This database instance failed to turn on flashback database
    Android蓝牙串口程序开发
    指尖上的电商---(5)schema.xml配置具体解释
    iOS-UIImage imageWithContentsOfFile 和 imageName 对照
    JSON-RPC轻量级远程调用协议介绍及使用
    POJ 2296 Map Labeler(2-sat)
    接口測试-HAR
    [Leetcode]Combination Sum II
    MarkDown、Vim双剑合璧
  • 原文地址:https://www.cnblogs.com/weigy/p/13413403.html
Copyright © 2020-2023  润新知