在实际编程中,对数值进行格式化处理是常用的操作。虽然可以利用前面介绍的printf()和String类的format()方法,进行数值的格式化处理,但这些方法主要还是对字符串进行格式化处理,对数值的格式化处理还不能满足实际要求。
Java API类库提供了DecimalFormat类用于数值的格式化处理,主要是格式化十进制数值,它可以将数值格式化为整数、浮点数、科学计数法、百分数等。同时也可以为数值加上单位和控制数值的精度。
DecimalFormat类在格式化数字时,会使用由一些预定义字符构成的模式串,使数字按照一定的规则进行匹配。下表给出了模式串常用的预定义字符及含义。

模式串是一个字符串,字符串由上表预定义的字符组成。实例化DecimalFormat对象时,需要传入这个字符串。
例如模式串:###.##
在上面的模式串中,包含两个预定义字符,一个字符是“#”,一个字符是“.”。查上表可知字符“#”表示一位阿拉伯数字,“.”表示小数分隔符。由此可以得出模式串“###.##”的输出格式是3位整数和2位小数,如:129.56、300.12等。
案例1:输出固定位数的整数和小数,例如取2位整数、保留3位小数等。
在eclipse下新建项目PBaseUnit16,创建包unit,在unit包下创建Java类DecimalFormatSample1。代码如下:
/**
* @Title: DecimalFormatSample1.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package unit;
import java.text.DecimalFormat;
/**
* @ClassName: DecimalFormatSample1
* @Description: 数值处理与运算(数值格式化输出)案例1
* @author 编程训练营
* @date
*
*/
public class DecimalFormatSample1 {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
double dValue = 129.563291;
// 取3位整数和2位小数
DecimalFormat dcimalFormat = new DecimalFormat("###.##");
String strFormat = dcimalFormat.format(dValue);
System.out.println(strFormat);
}
}程序结构分析
实例化DecimalFormat对象时,传入模式串“###.##”,该模式串的输出格式是3位整数和2位小数。然后调用对象的format()方法对传入的数值进行格式化处理,处理结果以String对象返回。
程序执行结果如下图所示:

数值用科学计数法表示
例如模式串:#.##E00
在上面的模式串中,包含四个预定义字符,一个字符是“#”,一个字符是“.”,一个字符是“E”,一个字符是“0”。查上表可知字符“#”表示一位阿拉伯数字,“.”表示小数分隔符,“E” 表示分割科学技术法中的尾数和指数,“0”表示一位阿拉伯数字。
由此可以得出模式串“#.##E00”的输出格式是数值的科学计数法,格式为整数1位,小数2位,指数3位。如:1.29E002等。
案例2:数值用科学计数法表示,要求整数1位,小数2位,指数2位。
在PBaseUnit16项目unit包下创建Java类DecimalFormatSample2。代码如下:
/**
* @Title: DecimalFormatSample2.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package unit;
import java.text.DecimalFormat;
/**
* @ClassName: DecimalFormatSample2
* @Description: 数值处理与运算(数值格式化输出)案例2
* @author 编程训练营
* @date
*
*/
public class DecimalFormatSample2 {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
double dValue = 129.563291;
// 科学计数法
DecimalFormat dcimalFormat1 = new DecimalFormat("#.##E000");
String strFormat1 = dcimalFormat1.format(dValue);
System.out.println(strFormat1);
}
}程序结构分析
实例化DecimalFormat对象时,传入模式串“#.##E000”,该模式串的输出格式是科学计数法。调用对象的format()方法对传入的数值进行格式化处理,处理结果以String对象返回。
程序执行结果如下图所示:

用逗号分隔数值
例如模式串:,###
在上面的模式串中,包含两个预定义字符,一个字符是“,”,一个字符是“#”,”“,” 表示分组分隔符,例如数值每三位一组。
由此可以得出模式串“,###”的输出格式是数值每三位一组。如:129,678,320等。
案例3:用逗号分隔数值,每三位一组。
在PBaseUnit16项目unit包下创建Java类DecimalFormatSample3。代码如下:
/**
* @Title: DecimalFormatSample3.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package unit;
import java.text.DecimalFormat;
/**
* @ClassName: DecimalFormatSample3
* @Description: 数值处理与运算(数值格式化输出)案例3
* @author 编程训练营
* @date
*
*/
public class DecimalFormatSample3 {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
double dValue = 129563291;
// 数值分组,每三位一组
DecimalFormat dcimalFormat1 = new DecimalFormat(",###");
String strFormat1 = dcimalFormat1.format(dValue);
System.out.println(strFormat1);
}
}程序结构分析
实例化DecimalFormat对象时,传入模式串“,###”,该模式串的输出格式是数值每三位一组。然后调用对象的format()方法对传入的数值进行格式化处理。
程序执行结果如下图所示:
