import java.math.BigDecimal;
/**
* @author liangyehui
* @version v1.0
* @create 2020/2/13
**/
public class CompareTongbi {
/**计算同比
* @param preNum 同期数
* @param sufNum 往期数
*/
public static String percentBigDecimal(BigDecimal preNum, BigDecimal sufNum){
double result = countDecimal(preNum,sufNum);
if(result>0){
return ""+result+"%";
}
if(result<0){
return "-"+Math.abs(result)+"%";
}
if(result==0){
return "0"+"%";
}
return null;
}
public static 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;
}
if(preBoolean ==false){
return -100;
}
return 0;
}
//验证数字是否为零和null
public static boolean verifyNum(BigDecimal num){
if(null !=num && num.compareTo(BigDecimal.ZERO)!=0 ){
return true;
}
return false;
}
//验证两个数字是否相等
public static boolean verifyEqual(BigDecimal preNum, BigDecimal sufNum){
int n = preNum.compareTo(sufNum);
//比较 -1 小于 0 等于 1 大于
if(n==0){
return true;
}
return false;
}
//真正计算
public static double realCountDecimal(BigDecimal preNum, BigDecimal sufNum){
//(前面的数字-后面的数字)/后面的数字*100
BigDecimal bigDecimal = (preNum.subtract(sufNum)).divide(sufNum,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
if (bigDecimal.compareTo(BigDecimal.ZERO) !=0){
return bigDecimal.doubleValue();
}
return 0;
}
}
两个数计算同比
最新推荐文章于 2024-02-24 11:15:00 发布