<%@ page contentType="text/html; charset=gb2312"%> 格式化输出数字
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
格式化输出数字
     发布者: 发布时间:2006-10-20

   有时我们需要控制输出的数字的格式,如何使用java的类库做到这个呢?
   也许你不关心格式,但是你需要关心你的程序可以在全世界通用,像下面的这样一个简单的语句是依赖地区的:
    System.out.println(1234.56);
在美国,"." 是小数点,但在其它地方就不一定了。如何处理这个呢?

java.text 包中的一些包可以处理这类问题。下面的简单范例使用那些类解决上面提出的问题:

    import java.text.NumberFormat;

    import java.util.Locale;

    public class DecimalFormat1 {

        public static void main(String args[]) {

            // 得到本地的缺省格式

            NumberFormat nf1 = NumberFormat.getInstance();

            System.out.println(nf1.format(1234.56));

            // 得到德国的格式

            NumberFormat nf2 =NumberFormat.getInstance(Locale.GERMAN);

            System.out.println(nf2.format(1234.56));

        }

    }

如果你在美国,运行程序后输出:

    1,234.56

    1.234,56

换句话说,在不同的地方使用不同的习惯表示数字。

     NumberFormat.getInstance()方法返回NumberFormat的一个实例(实际上是NumberFormat具体的一个子类,例如DecimalFormat), 这适合根据本地设置格式化一个数字。你也可以使用非缺省的地区设置,例如德国。然后格式化方法根据特定的地区规则格式化数字。这个程序也可以使用一个简单的形式:

    NumberFormat.getInstance().format(1234.56)

但是保存一个格式然后重用更加有效。国际化是格式化数字时的一个大问题。

另一个是对格式的有效控制,例如指定小数部分的位数,下面是解决这个问题的一个简单例子:

    import java.text.DecimalFormat;

    import java.util.Locale;

    public class DecimalFormat2 {

        public static void main(String args[]) {

            // 得到本地的缺省格式

            DecimalFormat df1 = new DecimalFormat("####.000");

            System.out.println(df1.format(1234.56));

            // 得到德国的格式

            Locale.setDefault(Locale.GERMAN);

            DecimalFormat df2 = new DecimalFormat("####.000");

            System.out.println(df2.format(1234.56));

        }

    }

在这个例子中设置了数字的格式,使用像"####.000"的符号。这个模式意味着在小数点前有四个数字,如果不够就空着,小数点后有三位数字,不足用0补齐。程序的输出:

    1234.560

    1234,560

相似的,也可以控制指数形式的格式,例如:

    import java.text.DecimalFormat;

    public class DecimalFormat3 {

        public static void main(String args[]) {

            DecimalFormat df = new DecimalFormat("0.000E0000");

            System.out.println(df.format(1234.56));

        }

    }

输出:

    1.235E0003

对于百分数:

    import java.text.NumberFormat;

    public class DecimalFormat4 {

        public static void main(String args[]) {

            NumberFormat nf = NumberFormat.getPercentInstance();

            System.out.println(nf.format(0.47));

        }

    }

输出:

    47%

至此,你已经看到了格式化数字的几个不同的技术。另一方面,如何读取并解析包含格式化的数字的字符串?解析支持包含在NumberFormat中。例如:

    import java.util.Locale;

    import java.text.NumberFormat;

    import java.text.ParseException;

    public class DecimalFormat5 {

        public static void main(String args[]) {

            // 本地格式

            NumberFormat nf1 = NumberFormat.getInstance();

            Object obj1 = null;

            // 基于格式的解析

            try {

                obj1 = nf1.parse("1234,56");

            }

            catch (ParseException e1) {

                System.err.println(e1);

            }

            System.out.println(obj1);

            // 德国格式

            NumberFormat nf2 =

                NumberFormat.getInstance(Locale.GERMAN);

            Object obj2 = null;

            // 基于格式的解析

            try {

                obj2 = nf2.parse("1234,56");

            }

            catch (ParseException e2) {

                System.err.println(e2);

            }

            System.out.println(obj2);

        }

    }

这个例子分两部分,都是解析一个字符串:"1234,56"。第一部分使用本地格式解析,第二部分使用德国格式解析。当程序在美国运行,结果是:

    123456

    1234.56

换句话说,"1234,56"在美国被认为是一个巨大的整数"123456"而在德国被认为是一个小数"1234.56"。

还有格式化讨论的最后一个问题。在上面的例子中, DecimalFormat 和 NumberFormat 都被使用了。DecimalFormat 常用于获得很好的格式控制,而NumberFormat 常用于指定不同于本地的地区。如何结合两个类呢?

答案围绕着这样的事实:DecimalFormat是NumberFormat的一个子类,其实例被指定为特定的地区。因此,你可以使用NumberFormat.getInstance 指定一个地区,然后将结构强制转换为一个DecimalFormat对象。文档中提到这个技术可以在大多情况下适用,但是你需要用try/catch 块包围强制转换以防转换不能正常工作 (大概在非常不明显得情况下使用一个奇异的地区)。下面是一个这样的例子:

    import java.text.DecimalFormat;

    import java.text.NumberFormat;

    import java.util.Locale;

    public class DecimalFormat6 {

        public static void main(String args[]) {

            DecimalFormat df = null;

            // 得到一个NumberFormat 对象并

            // 强制转换为一个 DecimalFormat 对象

            try {

                df = (DecimalFormat)

                    NumberFormat.getInstance(Locale.GERMAN);

            }

            catch (ClassCastException e) {

                System.err.println(e);

            }

            // 设置格式模式

            df.applyPattern("####.00000");

            // format a number

            System.out.println(df.format(1234.56));

        }
    }

getInstance() 方法获得格式,然后调用applyPattern()方法设置格式模式,输出:

    1234,56000

如果你不关心国际化,可以直接使用DecimalFormat 。

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
Eclipse3.2安装简介
java初学者 常用开发工具介绍
在Java中动态执行类的静态方法
JDK1.5新特性介绍
Java开发工具大比拼
在Eclipse使用的快捷键
 
最近评论:
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(6604)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(3722)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(7252)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(1668)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(6252)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(7761)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号