1.简介
Java中的BigDecimal类,用来对超过16位有效位的数进行精确的运算。
2.构造方法
//int,string转BigDecimal
BigDecimal a = new BigDecimal(10);
//long,float,double转BigDecimal
BigDecimal b = BigDecimal.valueOf(5.55);
使用BigDecimal.valueOf()方法时, 会先把传入值转为字符串再新建BigDecimal对象, 可以避免类型转换中的精度问题
3.常用方法
//加法
BigDecimal c = a.add(b);
//减法
c = a.subtract(b);
//乘法
c = a.multiply(b);
c = a.multiply(b).setScale(4,BigDecimal.ROUND_HALF_UP);
//除法
c = a.divide(b, 2, RoundingMode.HALF_UP);
//求余数
c = a.remainder(b);
//最小值
c = a.min(b);
//最大值
c = a.max(b);
//绝对值
c = a.abs();
//相反数
c = a.negate();
//去除多余的0
a.stripTrailingZeros();
//去除多余的0, 并转为字符串
//不能使用toString(), 会返回科学计数法
String a_string = a.stripTrailingZeros().toPlainString();
//返回此BigDecimal的正负, -1为负, 0为0 , 1为正
int a_int = a.signum();
//比较大小, -1为a<b, 0为a=b , 1为a>b
a_int = a.compareTo(b);
//BigDecimal转其他类型
String b_string = b.toString();
int b_int = b.intValue();
long b_long = b.longValue();
float b_float = b.floatValue();
double b_double = b.doubleValue();
4.精度设置
a.setScale(4,BigDecimal.ROUND_HALF_UP);
1. BigDecimal.ROUND_UP
远离零的舍入模式
2. BigDecimal.ROUND_DOWN
接近零的舍入模式
3. BigDecimal.ROUND_CEILING
接近正无穷大的舍入模式
4. BigDecimal.ROUND_FLOOR
接近负无穷大的舍入模式
5. BigDecimal.ROUND_HALF_UP
向最近的一边数字舍入, 四舍五入
这个是最常用的
6. BigDecimal.ROUND_HALF_DOWN
向最近的一边数字舍入, 五舍六入
7. BigDecimal.ROUND_HALF_EVEN
向最近的一边数字舍入,四舍六入. 为五时,如果最近的一边数字是奇数,入,如果是偶数,舍
8. BigDecimal.ROUND_UNNECESSARY
计算结果是精确的,不需要舍入
结果不精确会抛出异常ArithmeticException