java.math.BigDecimal 运算和比较大小
java.math.BigDecimal 进行加减乘除计算
1 | BigDecimal num1 = new BigDecimal("10"); |
java.math.BigDecimal 比较大小
1 | BigDecimal a = new BigDecimal(100); |
RoundingMode(舍入模式)
java.math.RoundingMode:这是一种枚举类型,它定义了8种数据的舍入模式。它与java.math.BigDecimal类中定义的8个同名静态常量的作用相同,可用BigDecimal.setScale(int newScale, RoundingMode roundingMode)来设置数据的精度和舍入模式。
1. ROUND_UP:向远离零的方向舍入。
若舍入位为非零,则对舍入部分的前一位数字加1;若舍入位为零,则直接舍弃。即为向外取整模式。
2. ROUND_DOWN:向接近零的方向舍入。
不论舍入位是否为零,都直接舍弃。即为向内取整模式。
3. ROUND_CEILING:向正无穷大的方向舍入。
若 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;若为负,则舍入行为与 ROUND_DOWN 相同。即为向上取整模式。
4. ROUND_FLOOR:向负无穷大的方向舍入。
若 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;若为负,则舍入行为与 ROUND_UP 相同。即为向下取整模式。
5. ROUND_HALF_UP:向“最接近的”整数舍入。
若舍入位大于等于5,则对舍入部分的前一位数字加1;若舍入位小于5,则直接舍弃。即为四舍五入模式。
6. ROUND_HALF_DOWN:向“最接近的”整数舍入。
若舍入位大于5,则对舍入部分的前一位数字加1;若舍入位小于等于5,则直接舍弃。即为五舍六入模式。
7. ROUND_HALF_EVEN:向“最接近的”整数舍入。
若(舍入位大于5)或者(舍入位等于5且前一位为奇数),则对舍入部分的前一位数字加1;
若(舍入位小于5)或者(舍入位等于5且前一位为偶数),则直接舍弃。即为银行家舍入模式。
8. ROUND_UNNECESSARY
断言请求的操作具有精确的结果,因此不需要舍入。
如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。
不同舍入模式下的舍入操作汇总
输入数字 | UP | DOWN | CEILING | FLOOR | HALF_UP | HALF_DOWN | HALF_EVEN | UNNECESSARY |
---|---|---|---|---|---|---|---|---|
5.5 | 6 | 5 | 6 | 5 | 6 | 5 | 6 | ArithmeticException |
2.5 | 3 | 2 | 3 | 2 | 3 | 2 | 2 | ArithmeticException |
1.6 | 2 | 1 | 2 | 1 | 2 | 2 | 2 | ArithmeticException |
1.1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | ArithmeticException |
1.0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
-1.0 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
-1.1 | -2 | -1 | -1 | -2 | -1 | -1 | -1 | ArithmeticException |
-1.6 | -2 | -1 | -1 | -2 | -2 | -2 | -2 | ArithmeticException |
-2.5 | -3 | -2 | -2 | -3 | -3 | -2 | -2 | ArithmeticException |
-5.5 | -6 | -5 | -5 | -6 | -6 | -5 | -6 | ArithmeticException |