java.math.BigDecimal常用操作
刚学Java时我们会用float和double来做带小数的数值计算,但它俩只能用来做科学计算或者是工程计算。如果对精度要求高,比如项目中计算金额、工程面积时,我们需要使用Java在java.math包中提供的BigDecimal类。
记录一下我在项目中写的一个操作BigDecimal的工具类:
package com.xxx.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* BigDecimal工具类
* <p>
* 加法 add()
* 减法 subtract()
* 乘法 multiply()
* 除法 divide()
* 绝对值 abs()
*
* @Author wanglingqiang
* @Date 2021/9/15 14:39
*/
public class BigDecimalUtil {
private static final BigDecimal BigDecimal_ZERO = new BigDecimal("0.00");
/**
* 判断是否为空或0
*
* @param arg
* @return
*/
public static boolean isEmpty(BigDecimal arg) {
if (arg == null || BigDecimal.ZERO.equals(arg) || BigDecimal_ZERO.equals(arg)) {
return true;
}
return false;
}
/**
* 乘法(精确小数点后2位、四舍五入)
*
* @param arg1
* @param arg2
* @return
*/
public static BigDecimal multiply(BigDecimal arg1, BigDecimal arg2) {
if (arg1 == null || arg2 == null) {
return BigDecimal.ZERO;
}
return arg1.multiply(arg2).setScale(2, RoundingMode.HALF_UP);
}
/**
* 除法(精确小数点后2位、四舍五入)
*
* @param arg1
* @param arg2
* @return
*/
public static BigDecimal divide(BigDecimal arg1, BigDecimal arg2) {
if (arg1 == null || arg2 == null) {
return BigDecimal.ZERO;
}
return BigDecimalUtil.divide(arg1, arg2, 2);
}
/**
* 除法(四舍五入)
*
* @param arg1
* @param arg2
* @param scale 精确几位数
* @return
*/
public static BigDecimal divide(BigDecimal arg1, BigDecimal arg2, int scale) {
if (arg1 == null || arg2 == null) {
return BigDecimal.ZERO;
}
return arg1.divide(arg2, scale, RoundingMode.HALF_UP);
}
/**
* 返回值,精确小数点后2位、四舍五入
*
* @param arg
* @return
*/
public static BigDecimal valueOf(BigDecimal arg) {
if (arg == null) {
return BigDecimal.ZERO;
}
return arg.setScale(2, RoundingMode.HALF_UP);
}
/**
* 比较两个值的大小
* arg1 > arg2 返回1
* arg1 < arg2 返回-1
* arg1 == arg2 返回0
*
* @param arg1
* @param arg2
* @return
*/
public static int compare(BigDecimal arg1, BigDecimal arg2) {
if (arg1 == null || arg2 == null) {
throw new NullPointerException();
}
return arg1.compareTo(arg2);
}
private BigDecimalUtil() {
}
}
本章完