All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.emily.infrastructure.common.ComputeUtils Maven / Gradle / Ivy
package com.emily.infrastructure.common;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 计算工具类
*
* @author : Emily
* @since : 2024/4/30 9:10 PM
*/
public class ComputeUtils {
/**
* 获取有效值
* 1. 如果为空字符串,则抛出异常
* 2. 如果为数字,则返回原值
* 3. 如果为小数,则返回原值; 3.120000 返回 3.12
* 4. 如果为非数字,则抛出异常
*
* @param value 值
* @return 有效值
*/
public static String getEffectiveValue(String value) {
return getEffectiveValue(value, null);
}
/**
* 获取有效值
* 1. 如果为空字符串,并且默认值为空,则抛出异常
* 2. 如果为空字符串,并且默认值不为空,则返回默认值
* 3. 如果为数字,则返回原值
* 4. 如果为小数,则返回原值; 3.120000 返回 3.12
* 5. 如果为非数字,并且默认值不为空,则返回默认值
* 6. 如果为非数字,并且默认值为空,则抛出异常
*
* @param value 值
* @param defaultValue 默认值
* @return 有效值
*/
public static String getEffectiveValue(String value, String defaultValue) {
try {
return Long.valueOf(value).toString();
} catch (Exception e) {
try {
BigDecimal decimal = new BigDecimal(value);
return decimal.stripTrailingZeros().toPlainString();
} catch (Exception e1) {
if (StringUtils.isBlank(defaultValue)) {
throw new IllegalArgumentException("非法参数");
}
return defaultValue;
}
}
}
/**
* 保留小数
*
* @param decimal 原始值
* @param newScale 保留小数位数
* @param roundingMode 保留小数模式
* @param defaultValue 默认值
* @return 保留小数后的值
*/
public static String rounding(BigDecimal decimal, int newScale, RoundingMode roundingMode, String defaultValue) {
try {
return decimal.setScale(newScale, roundingMode).toPlainString();
} catch (Exception e) {
if (StringUtils.isBlank(defaultValue)) {
throw new IllegalArgumentException("非法参数");
}
return defaultValue;
}
}
/**
* 保留小数,默认四舍五入
*
* @param decimal 原始值
* @param newScale 保留小数位数
* @param defaultValue 默认值
* @return 保留小数后的值
*/
public static String rounding(BigDecimal decimal, int newScale, String defaultValue) {
return rounding(decimal, newScale, RoundingMode.HALF_UP, defaultValue);
}
/**
* 保留小数,默认四舍五入,如果原始值为null,则抛出异常
*
* @param decimal 原始值
* @param newScale 保留小数位数
* @return 保留小数后的值
*/
public static String rounding(BigDecimal decimal, int newScale) {
return rounding(decimal, newScale, RoundingMode.HALF_UP, null);
}
/**
* 保留小数
*
* @param value 原始值
* @param newScale 保留小数位数
* @param roundingMode 保留小数模式
* @param defaultValue 默认值
* @return 保留小数后的值
*/
public static String round(String value, int newScale, RoundingMode roundingMode, String defaultValue) {
try {
BigDecimal decimal = new BigDecimal(value.trim());
return decimal.setScale(newScale, roundingMode).toPlainString();
} catch (Exception e) {
if (StringUtils.isBlank(defaultValue)) {
throw new IllegalArgumentException("非法参数");
}
return defaultValue;
}
}
/**
* 保留小数,默认四舍五入
*
* @param value 原始值
* @param newScale 保留小数位数
* @param defaultValue 默认值
* @return 保留小数后的值
*/
public static String round(String value, int newScale, String defaultValue) {
return round(value, newScale, RoundingMode.HALF_UP, defaultValue);
}
/**
* 保留小数,默认四舍五入,如果原始值为null,则抛出异常
*
* @param value 原始值
* @param newScale 保留小数位数
* @return 保留小数后的值
*/
public static String round(String value, int newScale) {
return round(value, newScale, RoundingMode.HALF_UP, null);
}
/**
* 百分比计算
*
* @param value 百分比计算原值
* @param scale 保留小数位数
* @param defaultValue 默认值
* @return 百分比
*/
public static String toPercentage(String value, int scale, String defaultValue) {
try {
return toPercentage(Double.parseDouble(value), scale);
} catch (Exception e) {
if (StringUtils.isBlank(defaultValue)) {
throw new IllegalArgumentException("非法参数");
}
return defaultValue;
}
}
/**
* 百分比计算
*
* @param value 百分比计算原值
* @param scale 保留小数位数
* @return 百分比
*/
public static String toPercentage(double value, int scale) {
return String.format(String.format("%s%s%s", "%.", scale, "f%%"), value * 100);
}
}