java計算同比增長率的工具類
爲了數據的嚴謹性,統一裝換爲BigDecimal,話不多說,看代碼。
歡迎大家加羣 進行討論 qq羣:714398799
package com.pig4cloud.pigx.admin.api.util;
import java.math.BigDecimal;
public class PercentCount {
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) {
PercentCount p = new PercentCount();
BigDecimal a = new BigDecimal("3");
BigDecimal b = new BigDecimal("1");
String percent = p.percentBigDecimal(a, b);
System.out.println(percent);
}
}