mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-26 22:15:06 +08:00
新增 运营诊断接口
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
package com.jsowell.common.util;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
/**
|
||||
* BigDecimal工具类
|
||||
*
|
||||
* @author Auto
|
||||
* @Date 2026/4/1
|
||||
*/
|
||||
public class BigDecimalUtils {
|
||||
|
||||
/**
|
||||
* 工具类不允许实例化
|
||||
*/
|
||||
private BigDecimalUtils() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 空值转零
|
||||
*
|
||||
* @param value 原始值
|
||||
* @return 非空数值
|
||||
*/
|
||||
public static BigDecimal nullToZero(BigDecimal value) {
|
||||
return value == null ? BigDecimal.ZERO : value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安全除法
|
||||
*
|
||||
* @param dividend 被除数
|
||||
* @param divisor 除数
|
||||
* @param scale 保留小数位
|
||||
* @return 计算结果
|
||||
*/
|
||||
public static BigDecimal safeDivide(BigDecimal dividend, BigDecimal divisor, int scale) {
|
||||
BigDecimal safeDividend = nullToZero(dividend);
|
||||
BigDecimal safeDivisor = nullToZero(divisor);
|
||||
if (safeDivisor.compareTo(BigDecimal.ZERO) == 0) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
return safeDividend.divide(safeDivisor, scale, RoundingMode.HALF_UP);
|
||||
}
|
||||
|
||||
/**
|
||||
* 标准化数值显示
|
||||
*
|
||||
* @param value 原始值
|
||||
* @return 标准化后的数值
|
||||
*/
|
||||
public static BigDecimal normalize(BigDecimal value) {
|
||||
BigDecimal safeValue = nullToZero(value);
|
||||
if (safeValue.compareTo(BigDecimal.ZERO) == 0) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
return safeValue.stripTrailingZeros();
|
||||
}
|
||||
|
||||
/**
|
||||
* 将字符串安全转换为BigDecimal
|
||||
*
|
||||
* @param value 原始字符串
|
||||
* @return BigDecimal值
|
||||
*/
|
||||
public static BigDecimal parseOrZero(String value) {
|
||||
if (StringUtils.isBlank(value)) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
try {
|
||||
return new BigDecimal(value.trim());
|
||||
} catch (Exception e) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算环比百分比
|
||||
*
|
||||
* @param currentValue 当前周期值
|
||||
* @param previousValue 上周期值
|
||||
* @return 环比字符串
|
||||
*/
|
||||
public static String calculateRate(BigDecimal currentValue, BigDecimal previousValue) {
|
||||
BigDecimal safeCurrentValue = nullToZero(currentValue);
|
||||
BigDecimal safePreviousValue = nullToZero(previousValue);
|
||||
if (safePreviousValue.compareTo(BigDecimal.ZERO) == 0) {
|
||||
return "0%";
|
||||
}
|
||||
BigDecimal rate = safeCurrentValue.subtract(safePreviousValue)
|
||||
.divide(safePreviousValue, 4, RoundingMode.HALF_UP)
|
||||
.multiply(new BigDecimal("100"));
|
||||
BigDecimal normalizedRate = normalize(rate);
|
||||
if (normalizedRate.compareTo(BigDecimal.ZERO) > 0) {
|
||||
return "+" + normalizedRate.toPlainString() + "%";
|
||||
}
|
||||
return normalizedRate.toPlainString() + "%";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user