四舍五入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
ROUND_UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。
ROUND_DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于ROUND_UP,若为负数,舍入行为类似于ROUND_DOWN。Math.round()方法就是使用的此模式。
ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于ROUND_DOWN;若为负数,舍入行为类似于ROUND_UP。
HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。
HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。
HAIL_EVEN:银行家舍入法。

public class Test {
public static void main(String[] args) {
double a = 1.66728D;
double b = 1.33333D;
double c = 1.00000D;

BigDecimal aa = new BigDecimal(a);
BigDecimal bb = new BigDecimal(b);
BigDecimal cc = new BigDecimal(c);
System.out.println(aa.setScale(2, BigDecimal.ROUND_UP));
System.out.println(aa.setScale(2, BigDecimal.ROUND_DOWN));
System.out.println(bb.setScale(2, BigDecimal.ROUND_UP));
System.out.println(bb.setScale(2, BigDecimal.ROUND_DOWN));
System.out.println(cc.setScale(2, BigDecimal.ROUND_UP));
System.out.println(cc.setScale(2, BigDecimal.ROUND_DOWN));
System.out.println("-------------------------------------");
System.out.println(aa.setScale(2, RoundingMode.UP));
System.out.println(aa.setScale(2, RoundingMode.DOWN));
System.out.println(bb.setScale(2, RoundingMode.UP));
System.out.println(bb.setScale(2, RoundingMode.DOWN));
System.out.println(cc.setScale(2, RoundingMode.UP));
System.out.println(cc.setScale(2, RoundingMode.DOWN));

}
}

1.67
1.66
1.34
1.33
1.00
1.00
-------------------------------------
1.67
1.66
1.34
1.33
1.00
1.00