东莞做网站建设百度登录注册
刚学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() {}}
本章完