BigDecimal的加减乘除/比较大小
BigDecimal的简介
BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。因此,BigDecimal表示的数值是(unscaledValue × 10-scale)。
BigDecimal的加减乘除
public static void main(String[] args) {
BigDecimal b = new BigDecimal(10.00);
BigDecimal a = new BigDecimal(5.00);
BigDecimal c = new BigDecimal(5.20);
BigDecimal d = null;
//加法
d = b.add(a);
System.out.println(d);//15
d = b.add(c);
System.out.println(d);//15.20000000000000017763568394002504646778106689453125
d = b.add(c,MathContext.DECIMAL32);
System.out.println(d);//15.20000
//减法
d = b.subtract(a);
System.out.println(d);//5
d = b.subtract(c,MathContext.DECIMAL32);
System.out.println(d);//4.800000
//乘法
d = b.multiply(a);
System.out.println(d); //50
d = b.multiply(c,MathContext.DECIMAL32);
System.out.println(d);//52.00000
//除法
d = b.divide(a);
System.out.println(d); // 2
d = b.divide(a,MathContext.DECIMAL32);
System.out.println(d); //2
d = b.divide(a,2,BigDecimal.ROUND_HALF_UP);//scale:小数点位数
System.out.println(d); //2.00
}
除法
BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;
- divisor为除数,不能为零;
- scale为小数位数;
- roundingMode为小数模式:
1 ROUND_UP :进一位
2 ROUND_DOWN:舍弃
3 ROUND_HALF_DOWN:舍弃部分> 5,进一位
4 ROUND_HALF_UP:舍弃部分>=.5,进一位
5 ROUND_HALF_EVEN:
如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP ;如果它为偶数,则作 ROUND_HALF_DOWN 。
6 ROUND_CEILING
如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作。
7 ROUND_FLOOR
如果 BigDecimal 为正,则作 ROUND_UP ;如果为负,则作 ROUND_DOWN 。
8 ROUND_UNNECESSARY
该“伪舍入模式”实际是指明所要求的操作必须是精确的,,因此不需要舍入操作。
BigDecimal b = new BigDecimal(10.00);
BigDecimal a = new BigDecimal(5.30);
BigDecimal d = null;
d = b.divide(a,MathContext.DECIMAL32);
System.out.println(d); //1.886792
d = b.divide(a,2,BigDecimal.ROUND_DOWN);//scale:小数点位数
System.out.println("ROUND_DOWN: "+ d); //1.88
d = b.divide(a,2,BigDecimal.ROUND_UP);//scale:小数点位数
System.out.println("ROUND_UP: "+ d); //1.89
比较大小
BigDecimal的compareTo方法比较大小
返回的结果是int类型,-1表示小于,0是等于,1是大于