java关于数字处理的详解

java的数字处理,这里主要讲的是两个类,一个是抽象类NumberFormat,以及该抽象类的具体子类DecimalFormat

一,NumberFormat

       NumberFormat类是所有数值格式的基类。此类提供格式化和解析数值的接口。 NumberFormat类是一个抽象类,是Format的子类,因此不能使用new的方式创建对象,在使用时可以直接使用NumberFormat类中提供的静态方法为其实例化。 NumberFormat类主要是用于国际化的数字格式化。它可以用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定。

它的具体用法如下所示:

  double exFormat01 = 12345.67;
        double exFormat02 = 1234567.89;
        double exFormat03 = 0.51;

        // 得到操作系統默认的格式化对象
        // 通过调用getInstance这个方法,进行实例化        
        // 所有的getInstance方法,它的返回值都为String类型
        NumberFormat myFormat = NumberFormat.getInstance();
        System.out.println("default format: " + myFormat.format(exFormat01));
        // 通过Locale.地区名 来获得不同地区的计数格式
        NumberFormat usFormat = NumberFormat.getInstance(Locale.US);
        System.out.println("US format: " + usFormat.format(exFormat01));

        NumberFormat chFormat = NumberFormat.getInstance(Locale.CHINA);
        System.out.println("CH format: " + chFormat.format(exFormat01));

        NumberFormat jaFormat = NumberFormat.getInstance(Locale.JAPAN);
        System.out.println("JA format: " + jaFormat.format(exFormat01));

        System.out.println("------华丽的-----------------------分割线-----");
        // 通过调用getIntegerInstance()获得以整数格式展示的表达式
        NumberFormat intFormat = NumberFormat.getIntegerInstance();
        System.out.println("integer format: " + intFormat.format(exFormat01));

        System.out.println("------华丽的-----------------------分割线-----");
        // 通过调用getCurrencyInstance()获得以货币格式展示的表达式,通过Locale.地区名 来获得不同地区的货币格式
        NumberFormat curDefFormat = NumberFormat.getCurrencyInstance();
        System.out.println("default currency format: " + curDefFormat.format(exFormat02));

        NumberFormat curUSFormat = NumberFormat.getCurrencyInstance(Locale.US);
        System.out.println("US currency format: " + curUSFormat.format(exFormat02));

        System.out.println("------华丽的-----------------------分割线-----");
        // 通过调用getPercentInstance()获得以百分比格式展示的表达式
        NumberFormat perFormat = NumberFormat.getPercentInstance();
        System.out.println("percent format: " + perFormat.format(exFormat03));

        System.out.println("------华丽的-----------------------分割线-----");
      
        NumberFormat numFormat = NumberFormat.getInstance();
        Number num;
        try {
            // 通过调用parse方法可以将字符串转换成Number类型
            num = numFormat.parse("1,234,567.8");
            // 再通过Number的xxxValue()方法将Number类型转换成基本数据类型
            double d = num.doubleValue();
            System.out.println(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }

运行结果如图所示:

java关于数字处理的详解

二,DecimalFormat

DecimalFormat类是NumberFormat类的一个具体子类,用于格式化十进制数字。 DecimalFormat类可以直接使用new关键字创建对象。 DecimalFormat类可以根据指定的模式对数字进行格式化。

常用的模式: #          如果是0不表示

                      0           0也表示

                      .          小数分隔符

                      ,          分隔符分组分隔符

                     %          乘以100并显示为百分数

                     \u00A4     货币格式

它的具体用法如下所示:

// DecimalFormat是NumberFormat的具体子类,可以通过new实例化
        DecimalFormat exFormat1 = new DecimalFormat("###,###.###");
        System.out.println("format: " + exFormat1.format(12340.56));
        System.out.println("format: " + exFormat1.format(1234567890.12345));

        System.out.println("------华丽的-----------------------分割线-----");

        DecimalFormat exFormat2 = new DecimalFormat("000,000.000");
        System.out.println("format: " + exFormat2.format(1230.06));
        System.out.println("format: " + exFormat2.format(1234567890.10234));

        System.out.println("------华丽的-----------------------分割线-----");
        // \u00A4货币形式
        DecimalFormat exFormat3 = new DecimalFormat("\u00A4#,###.###");
        System.out.println("format: " + exFormat3.format(1234.56));

        System.out.println("------华丽的-----------------------分割线-----");
        // 百分号形式
        DecimalFormat exFormat4 = new DecimalFormat("000%");
        System.out.println("format: " + exFormat4.format(0.51));
        exFormat4.applyPattern("###%");
        System.out.println("format: " + exFormat4.format(0.51));

        System.out.println("------华丽的-----------------------分割线-----");

        double exValue5 = 0.526;
        DecimalFormat exFormat5 = new DecimalFormat("'percent is' ###.#%");
        System.out.println(exFormat5.format(exValue5));

        System.out.println("----------------------------------");

        DecimalFormat exFormat = new DecimalFormat("\u00A4###,###.###");
        Number num;
        try {
            num = exFormat.parse("¥1,234,567.8");
            double d = num.doubleValue();
            System.out.println(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }

运行如图所示:

java关于数字处理的详解