DecimalFormat的几种用法!

package com.lee.test;java


import java.text.DecimalFormat;app

import java.util.Locale;ide


/**spa

 *  DecimalFormat的几种用法!.net

 *  @author leeorm

 *  @depict NumberFormat.getInstance()方法返回NumberFormat的一个实例(对象

 *  其实是NumberFormat具体的一个子类,例如DecimalFormat), 这适合根ci

 *  据本地设置格式化一个数字。你也可使用非缺省的地区设置,例如德国。而后格式文档

 *  化方法根据特定的地区规则格式化数字。这个程序也可使用一个简单的形式:字符串

 * NumberFormat.getInstance().format(1234.56)

 */

public class Demo_test {

public static void main(String[] args) {

// for (int i = 1; i <= 100; i++) {

// String squence = new DecimalFormat("00000").format(i);

// System.out.println(squence+",");

// }

// 获得本地的缺省格式

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补齐。程序的输出:

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

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

}

}


==========================================================================

   在作做业的时候不免有些生疏,也许是由于我这堂课没听,在查API的时候即便查到了一不定立刻运用自如.因此冲了下浪,哈哈~~~终于发现了条大鱼. 

    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.5601234,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"。第一部分使用本地格式解析,第二部分使用德国格式解析。当程序在美国运行,结果是:1234561234.56换句话说,"1234,56"在美国被认为是一个巨大的整数"123456"而在德国被认为是一个小数"1234.56"。3.4.    DecimalFormat 和 NumberFormat的联系在上面的例子中, 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 numberSystem.out.println(df.format(1234.56));}}getInstance() 方法得到格式,而后调用applyPattern()方法设置格式模式,输出:1234,56000若是你不关心国际化,能够直接使用DecimalFormat 。其中v 为未处理的double,scale为需求精度,返回须要小数位数的doublepublic static double round(double v,int scale){        if(scale<0){            throw new IllegalArgumentException(                "The scale must be a positive integer or zero");        }        BigDecimal b = new BigDecimal(Double.toString(v));        BigDecimal one = new BigDecimal("1");        return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();    }

相关文章
相关标签/搜索