Java BigDecimal总结使用场景

1、应用场景介绍

大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。比如:金额 ,不太推荐使用Double 因为没有BigDecimal好,哈哈

2、BigDecimal方法的使用

Java BigDecimal总结使用场景
我们通常命一个名给BigDecimal复制是这样的

BigDecimal money = BigDecimal.ZERO 
money = money.add(金额);

通常是以 :对象 = 对象. 方法 的格式来进行处理的

3、格式化及使用

  • 3.1 格式化 DecimalFormat 解析:
符号 位置 描叙

https://www.jianshu.com/p/2947868d76eb

数字	阿拉伯数字,如果不存在则显示0
  • 3.2 使用的方法
    这里推荐大家使用一个将BigDecimal的金额转换为千分位的方法
// 将BigDecimal的金额转换为千分位
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
 * @author 伍接
 * @date 2020/8/31 21:03
 */
public class NumberUtil {
    private NumberUtil() {
    }
    /**
     * 将BigDecimal的金额转换为千分位
     */
    public static String formatAmt(BigDecimal value) {
        if (value == null) {
            return null;
        }
        DecimalFormat decimalFormat = new DecimalFormat("###,##0.00");
        return decimalFormat.format(value);
    }
}
  • 3.3 当BigDecimal 值为 null的时候设置为0

我们通常在开发过程中经常会忘掉一些空值的判断,这里觉得还是很有必要强调一下要加上非空的判断,不然会经常出现一些null针的一些异常,这个是很没有必要出现的一个错误。所有不管是哪些字段,最好加上非null的校验,和数据库的一致,然后 BigDecimal 就默认给他设置为0的值就好了。

4、使用时遇到过的问题

4.1、BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常的,异常如下:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)

解决方法:给divide设置精确的小数点

4.2、非空判断和setting值的时候,以及属性Copy的时候将null值也复制过来

上一篇:java求圆的面积(保留小数)


下一篇:Java之Math,Random,BigDecimal,BigIntegerhe DecimalFormat类的使用