public class MathUtils {
private static final int DEF_DIV_SCALE = 32;
/**
* 转为BigDecimal
*
* @param obj
*/
public static BigDecimal toBigDecimal(Object obj) {
String str = String.valueOf(obj);
return stringToBigDecimal(str);
}
/**
* 字符串转为BigDecimal
*
* @param str
*/
public static BigDecimal stringToBigDecimal(String str) {
if (StringTool.isNull(str)) {
str = "0";
}
return new BigDecimal(str);
}
/**
* BigDecimal数值相加
*
* @param bigDecimals
* @return
*/
public static BigDecimal add(BigDecimal... bigDecimals) {
BigDecimal bigDecimal = new BigDecimal(0);
for (BigDecimal decimal : bigDecimals) {
bigDecimal = bigDecimal.add(decimal);
}
return bigDecimal;
}
/**
* 任何类型数值相加
*
* @param objects
* @return
*/
public static BigDecimal add(Object... objects) {
int arrayLength = objects.length;
String[] stringArray = new String[arrayLength];
for (int i = 0; i < arrayLength; i++) {
stringArray[i] = String.valueOf(objects[i]);
}
return add(stringArray);
}
/**
* 字符串形式的数值相加
*
* @param strs
* @return
*/
public static BigDecimal add(String... strs) {
BigDecimal bigDecimal = new BigDecimal(0);
for (String str : strs) {
bigDecimal = bigDecimal.add(stringToBigDecimal(str));
}
return bigDecimal;
}
/**
* 两数相减
*
* @return
*/
public static double subtract(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 相减
*
* @return
*/
public static BigDecimal subtract(String... strs) {
BigDecimal str0 = new BigDecimal(strs[0]);
for (int i = 1; i < strs.length; i++) {
str0 = str0.subtract(stringToBigDecimal(strs[i]));
}
return str0;
}
/**
* BigDecimal类型两数相除
*
* @param bigDecimal1 除数
* @param bigDecimal2 被除数
* @return
*/
public static BigDecimal divide(BigDecimal bigDecimal1, BigDecimal bigDecimal2) {
return bigDecimal1.divide(bigDecimal2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP);
}
/**
* BigDecimal类型和int类型两数相除
*
* @param bigDecimal
* @param number
* @return
*/
public static BigDecimal divide(BigDecimal bigDecimal, int number) {
return divide(bigDecimal, new BigDecimal(number));
}
/**
* 字符串类型和int类型两数相除
*
* @param str 字符串类型和int类型两数相除
* @param number
* @return
*/
public static BigDecimal divide(String str, int number) {
if (str.isEmpty()) {
str = "0";
}
return divide(stringToBigDecimal(str), number);
}
/**
* BigDecimal类型两数相乘
*
* @param bigDecimal1
* @param bigDecimal2
* @return
*/
public static BigDecimal multiply(BigDecimal bigDecimal1, BigDecimal bigDecimal2) {
return bigDecimal1.multiply(bigDecimal2);
}
/**
* BigDecimal类型和int类型两数相乘
*
* @param bigDecimal1
* @param number
* @return
*/
public static BigDecimal multiply(BigDecimal bigDecimal1, int number) {
return multiply(bigDecimal1, new BigDecimal(number));
}
/**
* 字符串类型和int类型两数相乘
*
* @param str
* @param number
* @return
*/
public static BigDecimal multiply(String str, int number) {
if (str.isEmpty()) {
str = "0";
}
return multiply(stringToBigDecimal(str), number);
}
/**
* 比较两个数的大小
*
* @param bg1 参数1
* @param bg2 参数2
* @return -1 bg1 < bg2;0 bg1 = bg2;1 bg1 > bg2
*/
public static int compare(BigDecimal bg1, BigDecimal bg2) {
return bg1.compareTo(bg2);
}
/**
* 比较两个字符串形式数的大小
*
* @param str1 参数1
* @param str2 参数2
* @return -1 bg1 < bg2;0 bg1 = bg2;1 bg1 > bg2
*/
public static int compare(String str1, String str2) {
return compare(stringToBigDecimal(str1), stringToBigDecimal(str2));
}
/**
* 获取日利息(根据利率和天数计算日利息,金额*利率/100/365*天数)
*
* @param amount 金额
* @param interestRate 利率 (百分制)
* @return 日利息
*/
public static BigDecimal getDailyInterest(BigDecimal amount, BigDecimal interestRate) {
BigDecimal interest = MathUtils.divide(MathUtils.multiply(amount, interestRate), 100); //年利息=金额*利率/100
BigDecimal dailyInterest = MathUtils.divide(interest, 365); //日利息=年利息/365
return dailyInterest;
}
/**
* 获取利息
*
* @param amount 金额
* @param interestRate 利率 (百分制)
* @param days 天数
* @return 利息
*/
public static BigDecimal getInterest(BigDecimal amount, BigDecimal interestRate, int days) {
BigDecimal interest = MathUtils.multiply(getDailyInterest(amount, interestRate), days); //日利息*天数
return interest;
}
}
标签:return,BigDecimal,金额,param,static,str,公共,Java,public
From: https://blog.51cto.com/u_15406246/12004716