BigDecimal 的加减乘除
BigDecimal a= BigDecimal.valueOf(0);
BigDecimal b= BigDecimal.valueOf(0);
BigDecimal c= BigDecimal.valueOf(0);
创建三个BigDecimal 类型的数据
c= a.add(b);//加法
c=a.subtract(b)//减法
c=a.multiply(b)//乘法
c=a.divide(b, RoundingMode.HALF_UP)
//除法 在除法中被除数不能为空,而且需要标明小数位保留的方法,否则会报错
c = a.abs();//绝对值
需要注意得是在除法中被除数不能为空,而且需要标明小数位保留的方法(即舍入模式),否则会报错。如果没有舍入,假如是1÷3,结果会是无限循环。
例如RoundingMode.HALF_UP,是向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。这个也是常用的四舍五入。
舍入的方式
ROUND_UP | 舍入远离零的舍入模式。 在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。 注意,此舍入模式始终不会减少计算值的大小。 |
ROUND_DOWN | 接近零的舍入模式。 在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。 注意,此舍入模式始终不会增加计算值的大小。 |
ROUND_FLOOR | 接近负无穷大的舍入模式。 如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同; 如果为负,则舍入行为与 ROUND_UP 相同。 注意,此舍入模式始终不会增加计算值。 |
ROUND_CEILING | 接近正无穷大的舍入模式。 如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同; 如果为负,则舍入行为与 ROUND_DOWN 相同。 注意,此舍入模式始终不会减少计算值。 |
ROUND_HALF_UP | 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。 如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。 -----四舍五入。 |
ROUND_HALF_DOWN | 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。 |
ROUND_HALF_EVEN | 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。 如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同; 如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。 |
ROUND_UNNECESSARY | 断言请求的操作具有精确的结果,因此不需要舍入。 如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。 |
判断BigDecimal类型的数据是否等于0if (a.compareTo(BigDecimal.ZERO)==0)
返回true则等于0,返回false,则不等于0