BigDecimal的基本用法这里不做说明,加减乘除运算都是最基本的,直接查看jdk源码即可。
除法运算
在基本运算中需要额外注意的是除法
运算,除法运算中存在两种特殊的情况:
- 除数为零:
- 除不尽:
运算的结果依然是BigDecimal类型,无限循环的数字用BigDecimal是无法精确表示的,所以遇到这种情况如果没有设置保留进度会抛出异常的。
因此在除法运算中,一定记得 判断除数
和 设置精度
。
四舍五入问题
在金额计算中,如果是人民币币种,一般我们的做法是精确到分级别,比如转账或者微信红包也都是这个精确度,但计算过程中的中间值和结果经常是超过两位小数的精度,因此必须做四舍五入。
在四舍五入中一般使用银行家算法,银行家算法是经过统计学验证的非亏损式的算法,是有利于金融方的一种算法,如需了解请自行百度。
- 确定一种舍入模式并定义为常量:在代码中用到的地方直接使用该常量,这样以后即使改了,可以做到统一修改。
- 负数的舍入问题: 在负数的情况不同的舍入方法会出现非预期的情况,例如:正数的1.445 => 1.45,而负数的 -1.445 => -1.44,在特定的模式下会出现这种非预期的结果,因此建议所有的舍入都基于正数来舍入,然互再使用取反运算获得舍入后的数值。