关于商业精确计算处理-BigDecimal

176 阅读1分钟

尽量不要选用double和float,因为有精度损失,应选择BigDecimal。

1.创建BigDecimal对象

BigDecimal b1 = new BigDecimal("1.34");//1.34
BigDecimal b2 = BigDecimal.valueOf(1.34);//1.34
其他类型转为BigDecimal对象:
BigDecimal b3 = new BigDecimal(Double.toString(1.34))//1.34

2.BigDecimal的常量

0:BigDecimal.ZERO
1:BigDecimal.ONE
10:BigDecimal.TEN

3.BigDecimal的加减乘除

public BigDecimal add(BigDecimal value);//加法
public BigDecimal subtract(BigDecimal value);//减法 
public BigDecimal multiply(BigDecimal value);//乘法
public BigDecimal divide(BigDecimal value);//除法

4.BigDecimal除法遇到除不尽的数会报错,一般指定精确位数和精确策略

格式化类型描述
ROUND_DOWN舍弃多余位数,如1.55会格式化为1.5,-1.55会格式化为-1.5
ROUND_UP进位处理,如1.52会格式化为1.6,-1.52会格式化为-1.6
ROUND_HALF_UP四舍五入,如果舍弃部分>=5,则进位
ROUND_HALF_DOWN五舍六入,如果舍弃部分>5,则进位
ROUND_CEILING如果值为正数,则与ROUND_UP模式相同;如果值为负数,则与ROUND_DOWN模式相同
ROUND_FLOOR如果值为正数,则与ROUND_DOWN模式相同;如果值为负数,则与ROUND_UP模式相同
ROUND_UNNECESSARY确认值的小数位数是否与传入第一个参数(保留小数的位数)相等,如果符合则返回值,如果不符抛出异常
ROUND_HALF_EVEN如果舍弃部门左边的数字为奇数,则与ROUND_HALF_UP模式相同,如果为偶数则与ROUND_HALF_DOWN模式相同