抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

java.math.BigDecimal 运算和比较大小

java.math.BigDecimal 进行加减乘除计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
BigDecimal num1 = new BigDecimal("10");
BigDecimal num2 = new BigDecimal("3");
BigDecimal num3;

//加法
num3 = num1.add(num2);
System.out.println("num1 + num2 = " + num3);

//减法
num3 = num1.subtract(num2);
System.out.println("num1 - num2 = " + num3);

//乘法
num3 = num1.multiply(num2);
System.out.println("num1 * num2 = " + num3);

//除法,四舍五入保留两位小数
num3 = num1.divide(num2, 2, RoundingMode.HALF_UP);
System.out.println("num1 / num2 = " + num3);

java.math.BigDecimal 比较大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
BigDecimal a = new BigDecimal(100);
BigDecimal b = new BigDecimal(111);

//使用 compareTo方法比较
// 注意:a、b均不能为null,否则会报空指针
if (a.compareTo(b) < 0) {
System.out.println("a小于b");
}

if (a.compareTo(b) == 0) {
System.out.println("a等于b");
}

if (a.compareTo(b) > 0) {
System.out.println("a大于b");
}

if (a.compareTo(b) >= 0) {
System.out.println("a大于等于b");
}

if (a.compareTo(b) <= 0) {
System.out.println("a小于等于b");
}

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