尽量不要选用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模式相同 |