格式化输出:java.text.DecimalFormat()格式化输出数字来源: 发布时间:星期四, 2009年2月12日 浏览:88次 评论:0
有时我们需要控制输出数字格式如何使用java类库做到这个呢? 也许你不关心格式但是你需要关心你可以在全世界通用像下面这样个简单语句是依赖地区: .out.prln(1234.56); 在美国\".\"是小数点但在其它地方就不定了如何处理这个呢? java.text包中些包可以处理这类问题下面简单范例使用那些类解决上面提出问题: importjava.text.NumberFormat; importjava.util.Locale; publicDecimalFormat1{ publicvoid(Stringargs){ //得到本地缺省格式 NumberFormatnf1=NumberFormat.getInstance; .out.prln(nf1.format(1234.56)); //得到德国格式 NumberFormatnf2= NumberFormat.getInstance(Locale.GERMAN); .out.prln(nf2.format(1234.56)); } } 如果你在美国运行后输出: 1,234.56 1.234,56 换句话说在区别地方使用区别习惯表示数字 NumberFormat.getInstance思路方法返回NumberFormat个例子(实际上是NumberFormat具体个子类例如DecimalFormat),这适合根据本地设置格式化个数字你也可以使用非缺省地区设置例如德国然后格式化思路方法根据特定地区规则格式化数字这个也可以使用个简单形式: NumberFormat.getInstance.format(1234.56) 但是保存个格式然后重用更加有效国际化是格式化数字时个大问题 另个是对格式有效控制例如指定小数部分位数下面是解决这个问题个简单例子: importjava.text.DecimalFormat; importjava.util.Locale; publicDecimalFormat2{ publicvoid(Stringargs){ //得到本地缺省格式 [Page] DecimalFormatdf1=DecimalFormat(\"####.000\"); .out.prln(df1.format(1234.56)); //得到德国格式 Locale.Default(Locale.GERMAN); DecimalFormatdf2=DecimalFormat(\"####.000\"); .out.prln(df2.format(1234.56)); } } 在这个例子中设置了数字格式使用像\"####.000\"符号这个模式意味着在小数点前有 4个数字如果不够就空着小数点后有 3位数字不足用0补齐输出: 1234.560 1234,560 相似也可以控制指数形式格式例如: importjava.text.DecimalFormat; publicDecimalFormat3{ publicvoid(Stringargs){ DecimalFormatdf=DecimalFormat(\"0.000E0000\"); .out.prln(df.format(1234.56)); } } 输出: 1.235E0003 对于百分数: importjava.text.NumberFormat; publicDecimalFormat4{ publicvoid(Stringargs){ NumberFormatnf=NumberFormat.getPercentInstance; .out.prln(nf.format(0.47)); } } 输出: 47% 至此你已经看到了格式化数字几个区别技术另方面如何读取并解析包含格式化数字串?解析支持包含在NumberFormat中例如: importjava.util.Locale; importjava.text.NumberFormat; [Page] importjava.text.ParseException; publicDecimalFormat5{ publicvoid(Stringargs){ //本地格式 NumberFormatnf1=NumberFormat.getInstance; Objectobj1=null; //基于格式解析 try{ obj1=nf1.parse(\"1234,56\"); } catch(ParseExceptione1){ .err.prln(e1); } .out.prln(obj1); //德国格式 NumberFormatnf2= NumberFormat.getInstance(Locale.GERMAN); Objectobj2=null; //基于格式解析 try{ obj2=nf2.parse(\"1234,56\"); } catch(ParseExceptione2){ .err.prln(e2); } .out.prln(obj2); [Page] } } 这个例子分两部分都是解析个串:\"1234,56\"第部分使用本地格式解析第 2部分使用德国格式解析当在美国运行结果是: 123456 1234.56 换句话说\"1234,56\"在美国被认为是个巨大整数\"123456\"而在德国被认为是个小数\"1234.56\" 还有格式化讨论最后个问题在上面例子中DecimalFormat和NumberFormat都被使用了DecimalFormat常用于获得很好格式控制而NumberFormat常用于指定区别于本地地区如何结合两个类呢? 答案围绕着这样事实:DecimalFormat是NumberFormat个子类,其例子被指定为特定地区因此你可以使用NumberFormat.getInstance指定个地区然后将结构强制转换为个DecimalFormat对象文档中提到这个技术可以在大多情况下适用但是你需要用try/catch块包围强制转换以防转换不能正常工作(大概在非常不明显得情况下使用个奇异地区)下面是个这样例子: importjava.text.DecimalFormat; importjava.text.NumberFormat; importjava.util.Locale; publicDecimalFormat6{ publicvoid(Stringargs){ DecimalFormatdf=null; //得到个NumberFormat对象并 //强制转换为个DecimalFormat对象 try{ df=(DecimalFormat) NumberFormat.getInstance(Locale.GERMAN); } catch(ClassCastExceptione){ .err.prln(e); } //设置格式模式 df.applyPattern(\"####.00000\"); [Page] //formatanumber .out.prln(df.format(1234.56)); } } getInstance思路方法获得格式然后applyPattern思路方法设置格式模式输出: 1234,56000 如果你不关心国际化可以直接使用DecimalFormat 0
相关文章读者评论发表评论 |
|