java.math.BigDecimal常用操作

刚学Java时我们会用float和double来做带小数的数值计算,但它俩只能用来做科学计算或者是工程计算。如果对精度要求高,比如项目中计算金额、工程面积时,我们需要使用Java在java.math包中提供的BigDecimal类。


记录一下我在项目中写的一个操作BigDecimal的工具类:

package com.xxx.util;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * BigDecimal工具类
 * 

* 加法 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() { } }


本章完


你可能感兴趣的:(java)