关注我,升职加薪就是你!
金融项目做多了,不可能每次遇到需要计算的,都要重新写工具类。由于这部分代码是公共的,就把它记录在这里吧,省的下次再写这些重复性的东西。如果对你们有帮助,你们也可以收藏保存下来。
话不多说,下面就直接上代码吧。
package com.demo.nacosprovider.common;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* @Author: Paul
* @Date: 2021/10/28
* @Function: 数值计算工具类
*/
public class BigDecimalUtils {
private static Logger logger = LoggerFactory.getLogger(BigDecimalUtils.class);
/**
* 小数位默认取2位
*/
private static final Integer DEFAULT_SCALE = 2;
public static final BigDecimal BigDecimal_100 = new BigDecimal("100");
/**
* @author: Paul
* @time: 2021/10/28
* @description: 获取数值对象
* @param: [value]
* @return: java.math.BigDecimal
*/
public static BigDecimal getBigDecimal(Object value) {
BigDecimal result = null;
try {
result = new BigDecimal(value.toString());
} catch (Exception e) {
logger.error("非法参数,无法转为Bigdecimal类型");
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 获取数值对象
* @param: [value, defaultValue]
* @return: java.math.BigDecimal
*/
public static BigDecimal getBigDecimal(Object value, Number defaultValue) {
BigDecimal result = null;
try {
result = new BigDecimal(value.toString());
} catch (Exception e) {
logger.error("非法参数,无法转为Bigdecimal类型");
result = new BigDecimal(defaultValue.toString());
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的加法运算,获取所有参数的和
* @param: [values]
* @return: java.math.BigDecimal
*/
public static BigDecimal add(Number... values) {
BigDecimal result = BigDecimal.ZERO;
if (values == null || values.length == 0) {
return result;
}
for (Number value : values) {
if (value != null) result = result.add(new BigDecimal(value.toString()));
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的加法运算,获取所有参数的和
* @param: [values]
* @return: java.math.BigDecimal
*/
public static BigDecimal add(BigDecimal... values) {
BigDecimal result = BigDecimal.ZERO;
if (values == null || values.length == 0) {
return result;
}
for (BigDecimal value : values) {
if (value != null) result = result.add(value);
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的减法运算。
* @param: [value1, value2]
* @return: java.math.BigDecimal
*/
public static BigDecimal sub(Number value1, Number... value2) {
BigDecimal result = BigDecimal.ZERO;
if(value1 != null) {
result = result.add(new BigDecimal(value1.toString()));
}
if(value2 == null || value2.length == 0) {
return result;
};
for(Number value : value2) {
if(value != null) result = result.subtract(new BigDecimal(value.toString()));
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的减法运算。value1 - value2
* @param: [value1, value2]
* @return: java.math.BigDecimal
*/
public static BigDecimal sub(BigDecimal value1, BigDecimal... value2) {
BigDecimal result = BigDecimal.ZERO;
if (value1 != null) {
result = result.add(value1);
}
if (value2 == null || value2.length == 0) {
return result;
}
for (BigDecimal value : value2) {
if (value != null) result = result.subtract(value);
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的乘法运算
* @param: [values]
* @return: java.math.BigDecimal
*/
public static BigDecimal mul(Number... values) {
if (values == null || values.length == 0) {
return null;
}
BigDecimal result = BigDecimal.ONE;
for (Number value : values) {
if (value != null) result = result.multiply(new BigDecimal(value.toString()));
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的乘法运算
* @param: [values]
* @return: java.math.BigDecimal
*/
public static BigDecimal mul(BigDecimal... values) {
if (values == null || values.length == 0) {
return null;
}
BigDecimal result = BigDecimal.ONE;
for (BigDecimal value : values) {
if (value != null) result = result.multiply(value);
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供(相对)精确的除法运算
* @param: [dividend, divisor]
* @return: java.math.BigDecimal
*/
public static BigDecimal div(Number dividend, Number divisor) {
return div(dividend, divisor, DEFAULT_SCALE);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供(相对)精确的除法运算
* @param: [dividend, divisor]
* @return: java.math.BigDecimal
*/
public static BigDecimal div(BigDecimal dividend, BigDecimal divisor) {
return div(dividend, divisor, DEFAULT_SCALE);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供(相对)精确的除法运算
* @param: [dividend, divisor, scale]
* @return: java.math.BigDecimal
*/
public static BigDecimal div(Number dividend, Number divisor, Integer scale) {
if (dividend == null) return null;
if (divisor == null || divisor.doubleValue() == 0) {
throw new IllegalArgumentException(
"The divisor cannot be zero or null !");
}
if (scale == null) scale = DEFAULT_SCALE;
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(dividend.toString());
BigDecimal b2 = new BigDecimal(divisor.toString());
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供(相对)精确的除法运算
* @param: [dividend, divisor, scale]
* @return: java.math.BigDecimal
*/
public static BigDecimal div(BigDecimal dividend, BigDecimal divisor, Integer scale) {
if (dividend == null) return null;
if (divisor == null || divisor.doubleValue() == 0) {
throw new IllegalArgumentException(
"The divisor cannot be zero or null !");
}
if (scale == null) scale = DEFAULT_SCALE;
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
return dividend.divide(divisor, scale, BigDecimal.ROUND_HALF_UP);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的小数位四舍五入处理
* @param: [value]
* @return: java.math.BigDecimal
*/
public static BigDecimal round(Number value) {
return round(value, DEFAULT_SCALE);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的小数位四舍五入处理
* @param: [value]
* @return: java.math.BigDecimal
*/
public static BigDecimal round(BigDecimal value) {
return round(value, DEFAULT_SCALE);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的小数位四舍五入处理
* @param: [value, scale]
* @return: java.math.BigDecimal
*/
public static BigDecimal round(BigDecimal value, Integer scale) {
if (value == null) return null;
if (scale == null) scale = DEFAULT_SCALE;
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
return value.setScale(scale, BigDecimal.ROUND_HALF_UP);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 提供精确的小数位四舍五入处理
* @param: [value, scale]
* @return: java.math.BigDecimal
*/
public static BigDecimal round(Number value, Integer scale) {
if (value == null) return null;
if (scale == null) scale = DEFAULT_SCALE;
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(value.toString());
return b.divide(BigDecimal.ONE, scale, BigDecimal.ROUND_HALF_UP);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 格式化输出 (默认保留2位小数)
* @param: [value]
* @return: java.lang.String
*/
public static String format(BigDecimal value) {
if (value == null) {
throw new IllegalArgumentException("The value must be a valid value.");
}
DecimalFormat df = new DecimalFormat(".00");
return df.format(value);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 比较返回小的
* @param: [a, b]
* @return: java.math.BigDecimal
*/
public static BigDecimal min(Object a, Object b) {
BigDecimal i = new BigDecimal(String.valueOf(a));
BigDecimal j = new BigDecimal(String.valueOf(b));
return i.compareTo(j) < 0 ? i : j;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 比较返回小的
* @param: [a, b]
* @return: java.math.BigDecimal
*/
public static BigDecimal min(BigDecimal a, BigDecimal b) {
return a.compareTo(b) < 0 ? a : b;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 比较返回大的
* @param: [a, b]
* @return: java.math.BigDecimal
*/
public static BigDecimal max(BigDecimal a, BigDecimal b) {
return a.compareTo(b) > 0 ? a : b;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 返回百分比
* @param: [a]
* @return: java.math.BigDecimal
*/
public static BigDecimal toPercent(BigDecimal a) {
return a.divide(new BigDecimal("100"));
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 对象为null时转换为零
* @param: [a]
* @return: java.math.BigDecimal
*/
public static BigDecimal transNullToZERO(BigDecimal a) {
return a == null ? BigDecimal.ZERO : a;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 将null或空字符转换为零
* @param: [a]
* @return: java.math.BigDecimal
*/
public static BigDecimal transNullStringToZERO(String a) {
if (StringUtils.isEmptyStr(a)) {
return BigDecimal.ZERO;
}
return new BigDecimal(a.trim());
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 功能描述:负数转0
* @param: [a]
* @return: java.math.BigDecimal
*/
public static BigDecimal transMinusToZERO(BigDecimal a) {
return a.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : a;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 由于java语言中对浮点数的二进制转换会产生问题,因此在将浮点数转换为BigDecimal类型时需要先将浮点数转换为String型
* @param: [num]
* @return: java.math.BigDecimal
*/
public static BigDecimal getExactBigDicimal(double num) {
String numStr = num + "";
return new BigDecimal(numStr);
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 校验是否为小于等于零的数字
* @param: [number]
* @return: boolean
*/
public static boolean isNotPlus(BigDecimal number) {
if (number == null) {
return true;
}
if (number.compareTo(new BigDecimal(0)) <= 0) {
return true;
}
return false;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 校验是否大于零的数字
* @param: [number]
* @return: boolean
*/
public static boolean isGreaterZero(BigDecimal number) {
if (number == null) {
return false;
}
if (number.compareTo(new BigDecimal(0)) <= 0) {
return false;
}
return true;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 将可能为空的BigDecimal转为BigDecimal
* @param: [num]
* @return: java.math.BigDecimal
*/
public static BigDecimal convertBigDecimal(BigDecimal num) {
if (num == null) {
num = new BigDecimal(0);
}
return num;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 将可能为空的Integer转为0
* @param: [integer]
* @return: java.lang.Integer
*/
public static Integer convertInteger(Integer integer) {
if (integer == null) {
integer = new Integer(0);
}
return integer;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 将BigDecimal转为BigDecimal, 允许自己定义异常时的返回值
* @param: [num, bd]
* @return: java.math.BigDecimal
*/
public static BigDecimal convertBigDecimal(BigDecimal num, BigDecimal bd) {
if (num == null) {
return bd;
}
return num;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 将BigDecimal转为String
* @param: [num]
* @return: java.lang.String
*/
public static String covertBigDecimalToString(BigDecimal num) {
if (num == null) {
return "";
}
return num.toString();
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 将BigDecimal转为double
* @param: [num]
* @return: double
*/
public static double toDouble(BigDecimal num) {
if (num == null) {
return 0;
}
return num.doubleValue();
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 判断bd1是否小于bd2
* @param: [bd1, bd2]
* @return: boolean
*/
public static boolean compareBigDecimalMinus(BigDecimal bd1, BigDecimal bd2) {
boolean returnFlag = false;
int i1 = bd1.compareTo(bd2);
if (i1 < 0) {
returnFlag = true;
}
return returnFlag;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 判断bd1是否小于等于bd2
* @param: [bd1, bd2]
* @return: boolean
*/
public static boolean compareBigDecimalMinusEq(BigDecimal bd1, BigDecimal bd2) {
boolean returnFlag = false;
int i1 = bd1.compareTo(bd2);
if (i1 < 0 || i1 == 0) {
returnFlag = true;
}
return returnFlag;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 判断bd1是否大于bd2
* @param: [bd1, bd2]
* @return: boolean
*/
public static boolean compareBigDecimalPlus(BigDecimal bd1, BigDecimal bd2) {
boolean returnFlag = false;
int i1 = bd1.compareTo(bd2);
if (i1 > 0) {
returnFlag = true;
}
return returnFlag;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 判断BigDecimal是否为null
* @param: [bigDecimal]
* @return: boolean
*/
public static boolean isNullBigDecimal(BigDecimal bigDecimal) {
boolean result = false;
if (bigDecimal == null) {
result = true;
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 判断BigDecimal是否大于或等于零,为null时返回false
* @param: [bigDecimal]
* @return: boolean
*/
public static boolean isGreaterOrEqualToZero(BigDecimal bigDecimal) {
boolean result = false;
if (BigDecimalUtils.isNullBigDecimal(bigDecimal)) {
return result;
}
if (bigDecimal.compareTo(BigDecimal.ZERO) >= 0) {
result = true;
}
return result;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 如果bigDecimal等于0则返回1,否则返回bigDecimal
* @param: [bigDecimal]
* @return: java.math.BigDecimal
*/
public static BigDecimal transZEROToONE(BigDecimal bigDecimal) {
if (BigDecimal.ZERO.compareTo(bigDecimal) == 0) {
return BigDecimal.ONE;
} else {
return bigDecimal;
}
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 判断两个BigDecimal 是否相等
* @param: [one, two]
* @return: boolean
*/
public static boolean isEqual(BigDecimal one, BigDecimal two) {
return one.compareTo(two) == 0 ? true : false;
}
/**
* @author: Paul
* @time: 2021/10/28
* @description: 对BigDecimal类型进行四舍五入并返回BigDecimal
* @param: [one, size]
* @return: java.math.BigDecimal
*/
public static BigDecimal roundBigDecimal(BigDecimal one, int size) {
return one.setScale(size, BigDecimal.ROUND_HALF_UP);
}
}
上述需要用到字符串工具类的一些方法,我就自己搞了个字符串工具类StringUtils 。
/**
* @Author: Paul
* @Date: 2021/10/28
* @Function: 字符串工具类
*/
public class StringUtils {
/**
*@author: Paul
*@time: 2021/10/28
*@description: 判断字符串是否为空或者为空白串
*@param: [str]
*@return: boolean
*/
public static boolean isEmptyStr(String str) {
if (null == str || "".equals(str.trim())) {
return true;
} else
return false;
}
/**
*@author: Paul
*@time: 2021/10/28
*@description: 判断字符串是否非空
*@param: [str]
*@return: boolean
*/
public static boolean isNotEmpty(String str) {
return !isEmptyStr(str);
}
}
好了,今天的分享就到这吧。
See u !
关注我,升职加薪就是你!