import java.math.RoundingMode; 

 import java.text.DecimalFormat; 

 import java.text.NumberFormat; 

 import java.text.ParseException; 

 import java.util.Currency; 

 import java.util.Locale; 

 import java.util.ResourceBundle; 



 public class Test { 

public static void main(String[] args) { 

new Test().test(); 

} 

public void test(){ 

double d = 3.1415926; 

double d1=100.2; 

long l = 123456789; 

String s = "987,3.1415926"; 

 // 
 NumberFormat nf = NumberFormat.getInstance(); 

 // 
 nf.setMaximumFractionDigits(2); 

 // 
 nf.setMinimumFractionDigits(2); 

 // 
 nf.setMinimumIntegerDigits(2); 

 // 
 nf.setMaximumIntegerDigits(2); 

 // 
 System.out.println(nf.format(d));//03.14 

 // 
 System.out.println(nf.format(d1));//00.12 

DecimalFormat df = new DecimalFormat(); 

//0占位符:显示pattern规定的位数,没有用0补齐 

 // 
 df.applyPattern("0.00");//3.14    100.20 

 // 
 df.applyPattern("000.0000");//003.1416    100.2000 

 // 
 df.applyPattern("000");//003    100 

//#占位符:显示pattern规定的位数,没有无需补充 

 // 
 df.applyPattern("##.###");//3.142    100.2 

 // 
 df.applyPattern("#");//3   100 

//以百分数形式显示 

 // 
 df.applyPattern("#.00%");//314.16%  10020.00 

 // 
 df.applyPattern("#.#%");//314.2%  10020% 

//以千分数显示,并取三位小数,不够用0补齐 

 // 
 df.applyPattern("#.000\u2030");//3141.593‰  100200.000‰ 

//添加分组分隔符 、负号 

 // 
 df.applyPattern("-,###.##");//123,456,789   

//嵌入文本 

 // 
 df.applyPattern("看看-,###.##ok");//看看-123,456,789ok   看看-100.2ok 

//解析文本成Number 

Number n = null; 

try { 

n = df.parse(s);//9873.1415926 

} catch (ParseException e) { 

e.printStackTrace(); 

} 

System.out.println(String.valueOf(n)); 

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

} 

/** 

* NumberFormat:public abstract class NumberFormat,是所有数值格式的抽象基类。 

* 抽象类,获取实例:NumberFormat nf = NumberFormat.getInstance(); 

* 格式化数值:nf.format(number); 

* 解析数值文本:nf.parse(strNumber); 

* 主要作用体现在国际化格式规范定义,以及获取简单数值格式,具体格式约束通过其子类:DecimalFormat实现 

*/ 

public void testNumberFormat(){ 

double d = 3.1415926; 

int i = 123456; 

String s = "3.1415926"; 

//NumberFormat 

NumberFormat nf = NumberFormat.getNumberInstance();//NumberFormat.getInstance()等效 

//添加地区国际化语言 

nf.getInstance(Locale.CHINA);//getInstance(Locale.CHINA); 

Locale.setDefault(Locale.CHINA);//设置JVM虚拟机默认语言格式 

//获得整数格式 

nf.getIntegerInstance(); 

//获得百分数格式 

nf.getPercentInstance(); 

//获得货币格式 

nf.getCurrencyInstance(); 

//解析给定字符串开头的文本,生成一个数值 

try { 

nf.parse(s); 

} catch (ParseException e) { 

e.printStackTrace(); 

} 

//设置此格式中是否使用分组 

nf.setGroupingUsed(true); 

//设置数的小数部分所允许的最大位数、最小位数,系统默认为三位小数 

nf.setMaximumFractionDigits(2); 

nf.setMinimumFractionDigits(2); 

//设置正数部分所允许的最大位数、最小位数 

nf.setMaximumIntegerDigits(2); 

nf.setMinimumIntegerDigits(2); 

//使用上面定义的nf,格式规范数字d 

String sd = nf.format(d); 

} 

/** 

* DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字 

* 要获取具体语言环境的 NumberFormat(包括默认语言环境),可调用 NumberFormat 的某个工厂方法,如 getInstance()。 

* 通常不直接调用 DecimalFormat 的构造方法,因为 NumberFormat 的工厂方法可能返回不同于 DecimalFormat 的子类。 

*/ 

public void testDecimalFormat(){ 

String pattern = ""; 

//使用默认模式和默认语言环境的符号创建一个 DecimalFormat 

DecimalFormat df = new DecimalFormat(); 

//使用给定的模式和默认语言环境的符号创建一个 DecimalFormat 

DecimalFormat df1 = new DecimalFormat(pattern); 

//通过继承获取 

DecimalFormat df2 = null; 

try{ 

df2 = (DecimalFormat)NumberFormat.getInstance(); 

}catch(ClassCastException e){ 

System.out.println(e); 

} 

//为格式化对象添加格式模式 

df.applyPattern(pattern); 

//使用分组,默认为true,并设置分组大小 

df.setGroupingUsed(true); 

df.setGroupingSize(3); 

//设置正数前、后缀 

df.setNegativePrefix("+"); 

df.setNegativeSuffix("%"); 

//设置负数前、后缀 

df.setPositivePrefix("-"); 

df.setPositiveSuffix("%"); 

//使用方法控制小数位数、整数位数、货币格式 

df.setMaximumFractionDigits(2); 

df.setMinimumIntegerDigits(2); 

df.setCurrency(Currency.getInstance(Locale.CHINA)); 

//允许设置整数中小数分隔符的行为。(有小数时始终显示小数分隔符。true时,无小数也显示小数分隔符)  

df.setDecimalSeparatorAlwaysShown(false); 

//设置小数的舍入模式,默认模式为RoundingMode.HALF_EVEN 

df.setRoundingMode(RoundingMode.HALF_EVEN); 

/* 

* pattern的形式举例: 

* 1、 

*/ 

} 



 }