1、应用场景介绍
大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。比如:金额 ,不太推荐使用Double 因为没有BigDecimal好,哈哈
2、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值也复制过来