登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - JAVA 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

格式化输出数字
发表日期:2004-07-30作者:[转贴] 出处:  


格式化输出数字

翻译:Cherami

email:cherami@163.net

原文:http://developer.java.sun.com/developer/TechTips/2000/tt0411.html

 

         * 格式化输出数字

          

格式化输出数字

有时我们需要控制输出的数字的格式,如何使用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 常用于指定不同于本地的地区。如何结合两个类呢?

答案围绕着这样的事实:DecimalFormatNumberFormat的一个子类,其实例被指定为特定的地区。因此,你可以使用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

 


 

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 格式化输出数字

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.002