Java 舍入模式 数字的格式化

舍入模式:

UP
向远离0的方向舍入
始终对非零舍弃部分前面的数字加 1。此舍入模式始终不会减少计算值的绝对值。
例如:1.6 → 2
      -1.6 → -2
      1.1 → 2
      -1.1 → -2


DOWN
向零方向舍入
此舍入模式始终不会增加计算值的绝对值。
例如:1.6 → 1
      -1.6 → -1
      1.1 → 1
      -1.1 → -1


CEILING
向正无穷方向舍入,此舍入模式始终不会减少计算值。
例如:1.6 → 2
      -1.6 → -1


FLOOR
向负无穷方向舍入,此舍入模式始终不会增加计算值。
例如:1.6 → 1
      -1.6 → -2


HALF_UP
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入,此舍入模式就是通常学校里讲的四舍五入。
例如:1.6 → 2
      -1.6 → -2
      1.5 → 2
      -1.5 → -2


HALF_DOWN
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入
例如:1.6 → 2
      -1.6 → -2
      1.4 → 1
      -1.4 → -1
      1.5 → 1
      -1.5 → -1


HALF_EVEN
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
如果舍弃部分左边的数字为奇数,则舍入行为同 RoundingMode.HALF_UP ;如果为偶数,则舍入行为同 RoundingMode.HALF_DOWN
例如:1.6 → 2
      -1.6 → -2
      2.5 → 2
      -2.5 → -2
      5.5 → 6
      -5.5 → -6


UNNECESSARY
计算结果是精确的,不需要舍入模式

 

数字的格式化:

 1      public  static  void main(String[] args)  throws ParseException {
 2          //  NumberFormat 逗号分隔
 3           double num1 = 20140426.193;
 4         NumberFormat format = NumberFormat.getInstance(Locale.CHINESE);
 5         System.out.println(format.format(num1));  //  20,140,426.193
 6 
 7           //  NumberFormat 百分数
 8          num1 = 0.2;
 9         format = NumberFormat.getPercentInstance();
10         System.out.println(format.format(num1));  //  20%
11          
12           //  NumberFormat 货币
13          num1 = 100;
14         format = NumberFormat.getCurrencyInstance(Locale.JAPAN);
15         System.out.println(format.format(num1));  //  ¥100    
16          
17           //  DecimalFormat #代表该位置上数字可有可无,0代表该位置的数字不存在的话补零
18          num1 = 20140426.193;
19         DecimalFormat f =  new DecimalFormat();
20         f.applyPattern("#########.0000");
21         System.out.println(f.format(num1));  //  20140426.1930
22          
23           //  DecimalFormat 默认四舍五入
24          f.applyPattern("#########.0");
25         System.out.println(f.format(num1));  //  220140426.2
26          
27           //  DecimalFormat 每三位以逗号进行分隔
28          f.applyPattern(",###");
29         System.out.println(f.format(num1));  //  20,140,426
30          
31           //  DecimalFormat 科学计数法
32          f.applyPattern("#.###E0");
33         System.out.println(f.format(num1));  //  2.014E7
34 
35           //  百分数
36          num1 = 0.15;
37         f.applyPattern("##%");
38         System.out.println(f.format(num1));  //  15%
39          
40           //  将格式嵌入文本
41          num1 = 15.2;
42         f.applyPattern("现在的时间是下午##点");
43         System.out.println(f.format(num1));  //  现在的时间是下午15点
44          
45           //  将带有格式化的字符数字复原
46          f.applyPattern("#,###.#");
47         System.out.println(f.parse("15.4"));
48         System.out.println(f.parse("201,415.46"));
49         
50          //  精度为2,向远离0的方向舍入
51          MathContext context =  new MathContext(2, RoundingMode.UP);
52         BigDecimal num2 =  new BigDecimal("1");
53         System.out.println(num2.divide( new BigDecimal(3), context));
54          //  精度为2,向零方向舍入 
55          context =  new MathContext(2, RoundingMode.DOWN);
56         System.out.println(num2.divide( new BigDecimal(3), context));
57          //  精度为2,向正无穷方向舍入
58          context =  new MathContext(2, RoundingMode.CEILING);
59         System.out.println(num2.divide( new BigDecimal(3), context));
60          //  精度为2,向负无穷方向舍入
61          context =  new MathContext(2, RoundingMode.FLOOR);
62         System.out.println(num2.divide( new BigDecimal(3), context));
63          //  精度为2,向(距离)最近的一边舍入(四舍五入),如果两边(的距离)相等,向上舍入
64          context =  new MathContext(2, RoundingMode.HALF_UP);
65         System.out.println(num2.divide( new BigDecimal(3), context));
66          //  精度为2,向(距离)最近的一边舍入,如果两边(的距离)相等,向下舍入
67          context =  new MathContext(2, RoundingMode.HALF_UP);
68         System.out.println(num2.divide( new BigDecimal(3), context));
69          //  精度为2,向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
70          context =  new MathContext(2, RoundingMode.HALF_EVEN);
71         System.out.println(num2.divide( new BigDecimal(3), context));
72     }

 

 

转载于:https://www.cnblogs.com/keyiei/p/3611858.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值