java.text
类 DecimalFormat
类 DecimalFormat
继承关系
java.lang.Object
>>java.text.Format
>> java.text.NumberFormat
>>java.text.DecimalFormat
>>java.text.Format
>> java.text.NumberFormat
>>java.text.DecimalFormat
已实现的接口
Serializable, Cloneable
基本概述
DecimalFormat
是
NumberFormat
的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。
要获取具体语言环境的 NumberFormat
(包括默认语言环境),可调用 NumberFormat
的某个工厂方法,如 getInstance()
。通常不直接调用 DecimalFormat
的构造方法,因为 NumberFormat
的工厂方法可能返回不同于 DecimalFormat
的子类。如果需要自定义格式对象,可执行:
NumberFormat f = NumberFormat.getInstance(loc); if (f instanceof DecimalFormat) { ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true); }
DecimalFormat
包含一个模式 和一组符号。可直接使用 applyPattern()
或间接使用 API 方法来设置模式。符号存储在 DecimalFormatSymbols
对象中。使用 NumberFormat
工厂方法时,可从已本地化的 ResourceBundle
中读取模式和符号。
舍入模式
同步
DecimalFormat 通常不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问某个格式,则必须保持外部同步。
测试代码
/*
* 实例化
*/
DecimalFormat df=(DecimalFormat) DecimalFormat.getInstance();
DecimalFormat df1=(DecimalFormat) NumberFormat.getInstance();
/*
* 设定小数位数
* public int getMaximumFractionDigits()
* 获取某个数的小数部分中所允许的最大数字位数。
DecimalFormat df1=(DecimalFormat) NumberFormat.getInstance();
/*
* 设定小数位数
* public int getMaximumFractionDigits()
* 获取某个数的小数部分中所允许的最大数字位数。
* 如需格式化除 BigInteger 和 BigDecimal 对象之外的数,则使用返回值的低位部分和 340。
*/
//系统默认保留三位
System.out.println(df.format(12.34567)); //12.346
//设置指定位数
df.setMaximumFractionDigits(2); //设置为两位小数
System.out.println(df.format(12.34567)); //12.35
/*
* 将数字转为百分比
*/
df.applyPattern("##.00%"); //两位小数,不足位数自动补0
System.out.println(df.format(123.456789)); //12345.68%
System.out.println(df.format(1)); //100.00%
System.out.println(df.format(0.015)); //1.50%
df.applyPattern("##.##%"); //最多两位小数
System.out.println(df.format(123.456789)); //12345.68%
System.out.println(df.format(1)); //100%
System.out.println(df.format(0.015)); //1.5%
df.setMaximumFractionDigits(2);
System.out.println(df.format(123.45678)); //12345.68%
System.out.println(df.format(1)); //100%
System.out.println(df.format(0.035)); //3.5%
/*
* 设置数字的分组大小
*/
df.setGroupingSize(3);
System.out.println(df1.format(123456789)); //123,456,789
//禁用分组设置
df1.setGroupingUsed(false);
System.out.println(df1.format(123456)); //123456
*/
//系统默认保留三位
System.out.println(df.format(12.34567)); //12.346
//设置指定位数
df.setMaximumFractionDigits(2); //设置为两位小数
System.out.println(df.format(12.34567)); //12.35
/*
* 将数字转为百分比
*/
df.applyPattern("##.00%"); //两位小数,不足位数自动补0
System.out.println(df.format(123.456789)); //12345.68%
System.out.println(df.format(1)); //100.00%
System.out.println(df.format(0.015)); //1.50%
df.applyPattern("##.##%"); //最多两位小数
System.out.println(df.format(123.456789)); //12345.68%
System.out.println(df.format(1)); //100%
System.out.println(df.format(0.015)); //1.5%
df.setMaximumFractionDigits(2);
System.out.println(df.format(123.45678)); //12345.68%
System.out.println(df.format(1)); //100%
System.out.println(df.format(0.035)); //3.5%
/*
* 设置数字的分组大小
*/
df.setGroupingSize(3);
System.out.println(df1.format(123456789)); //123,456,789
//禁用分组设置
df1.setGroupingUsed(false);
System.out.println(df1.format(123456)); //123456