• Java 四舍五入



    一、几种四舍五入的方法

    public static class Test {
    
          public static void main(String[] args) {
    
           
    
            String str = "111.675";
    
           
    
            //方法1:DecimalFormat
    
            DecimalFormat df = new DecimalFormat("#.00");
    
            try {
    
               Number n = df.parse(str);
    
               Double d = n.doubleValue();
    
               System.out.println("" + d);
    
            } catch (ParseException e1) {
    
               // TODO Auto-generated catch block
    
               e1.printStackTrace();
    
            }      
    
            String aString = df.format(Double.parseDouble(str));
    
            System.out.println(aString);
    
           
    
            //方法2:NumberFormat
    
            NumberFormat nf = NumberFormat.getInstance();
    
            nf.setMaximumFractionDigits(2);
    
            try {
    
               Number n = nf.parse(str);
    
               double d = n.doubleValue();
    
               System.out.println("" + d);
    
            } catch (ParseException e) {
    
               // TODO Auto-generated catch block
    
               e.printStackTrace();
    
            }      
    
            System.out.println(nf.format(Double.parseDouble(str)));
    
           
    
            //方法三:算术
    
            double d = ((double)Math.round(Double.parseDouble(str) * 100)) / 100;
    
            System.out.println("" + d);
    
           
    
            BigDecimal bd = new BigDecimal(str).setScale(2, RoundingMode.HALF_UP);
    
            double dd = bd.doubleValue();
    
            System.out.println(bd.toString());
    
            System.out.println("" + dd);
    
          }
    
       }

    结果如下:

    111.675

    111.68

    111.675

    111.68

    111.68

    111.68

    111.68

    通过结果可以看到,DecimalFormat和NumberFormat在将String转换成数字的过程中,没有进行四舍五入;在调用format的时候,才根据设置进行了四舍五入的转换。

    这两个类即使使用setRoundingMode也是相同的结果。而使用BigDecimal转换时,可以在String转换成数字的过程中,进行四舍五入。

    二、RoundingMode(从另一博客中直接截取)

      ROUND_CEILING:   舍位时往正无穷方向移动   1.1->2   1.5->2   1.8->2   -1.1->-1   -1.5->-1   -1.8->-1   
      ROUND_DOWN:向0的方向移动1.1->1   1.5->1   1.8->1   -1.1->-1   -1.5->-1   -1.8>-1   
      ROUND_FLOOR:与CEILING相反,往负无穷   1.1->1   1.5->1   1.8->1   -1.1->-2   -1.5->-2   -1.8->-2   
      ROUND_HALF_DOWN:以5为分界线,或曰五舍六入1.5->1   1.6->1   -1.5->-1   -1.6->-2 1.15->1.1   1.16->1.2 1.55->1.6  1.56->1.6
      ROUND_HALF_EVEN:同样以5为分界线,如果是5,则前一位变偶数1.15->1.2   1.16->1.2   1.25->1.2   1.26->1.3   
      ROUND_HALF_UP:最常见的四舍五入   
      ROUND_UNNECESSARY:无需舍位   
      ROUND_UP:与ROUND_DOWN,远离0的方向1.1->2   1.5->2   1.8->2   -1.1->-2   -1.5->-2   -1.8->-2   

    摘录自:

      BigDecimal 的roundMode 舍位模式

      IEEE的舍入规则

      

  • 相关阅读:
    第四章5
    第四章4
    第四章3
    第四章2
    第四章1
    第四章例4-8
    第四章例4-7
    第四章例4-6
    第四章例4-5
    第四章例4-4
  • 原文地址:https://www.cnblogs.com/huanyou/p/6265864.html
Copyright © 2020-2023  润新知