数字的格式化在解决实际问题时使用非常普遍,比如表示某超市的商品价格需要保留两位有效数字等。Java主要对浮点型数据进行数字格式化操作,其中浮点型数据包括double型和float型数据。
在Java中使用java.text.DecimalFormat类格式化数字,本节中将着重讲解DecimalFormat类。
DecimalFormat类
在Java中对没有格式化的数据遵循以下原则。
如果数据绝对值大于0.001并且小于10000000,Java将以常规小数形式表示。
如果数据绝对值小于0.001或者大于10000000,使用科学计数法表示。
由于上述输出格式不能满足解决实际问题要求,所以通常将结果格式化指定形式进行输出。在Java中可以使用DecimalFormat类进行格式化操作。
DecimalFormat是NumberFormat的一个子类,用于格式化十进制数字,它可以将一些数字格式化为整数、浮点数、科学计数法、百分数等。
通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况下可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat类中的applyPattern()方法来实现数字格式化。
当格式化数字时,在DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照一定特殊字符规则进行匹配。下表中列举了定义格式化模板中的特殊字符及其含义。
数字的格式化输出
import java.text.DecimalFormat;
public class DecimalFormatSimpleDemo {
//使用实例化对象时设置格式化模式
static public void SimgleFormat(String pattern, double value) {
DecimalFormat myFormat = new DecimalFormat(pattern); //实例化DecimalFormat对象
String output = myFormat.format(value);
//将数字进行格式化
System.out.println(value + "\t" + pattern + "\t" + output);
}
//使用applyPattern()方法对数字进行格式化
static public void UseApplyPatternMethodFormat(String pattern,double value){
DecimalFormat myFormat=new DecimalFormat(); //实例化DecimalFormat对象
myFormat.applyPattern(pattern); //调用applyPatten()方法设置格式化模板
System.out.println(value + " \t\t" + pattern + "\t\t" + myFormat.format(value));
}
public static void main(String[] args) {
SimgleFormat("###,###.###", 123456.789); //调用静态SimgleFormat()方法
SimgleFormat("00000000.###kg", 123456.789); //在数字后加上单位
SimgleFormat("000000.000", 123.78); //按照格式模板格式化数字,不存在的位以0显示
//调用静态UseApplyPatternMethodFormat()方法
UseApplyPatternMethodFormat("#.###%", 0.789); //将数字转化为百分数形式
UseApplyPatternMethodFormat("###.##", 123456.789); //将小数点后格式化为两位
UseApplyPatternMethodFormat("0.00\u2030", 0.789); //将数字转化为千分数形式
}
}
在Eclipse中运行本实例,运行结果如下图所示。
SimgleFormat()方法是在实例化DecimalFormat对象时为构造方法传参设置数字格式化模板,而UseApplyPatternMethodFormat()方法是在实例化DecimalFormat对象后调用applyPattern()方法设置数字格式化模板。
在DecimalFormat类中除了可以设置格式化模式来格式化数字之外,还可以使用一些特殊方法对数字进行格式化设置。例如:
DecimalFormat myFormat=new DecimalFormat();
//实例化DecimalFormat类对象
myFormat.setGroupingSize(2);
//设置将数字分组的大小
myFormat.setGroupingUsed(false); //设置是否支持分组
在上述代码中,setGroupingSize()方法用于设置格式化数字的分组大小,而setGroupingUsed()方法用于设置是否可以对数字进行分组操作。为了使读者更好理解这两个方法的使用,请看下面的实例。
例、 在项目中创建DecimalMethod类,在类的主方法中调用setGroupingSize()与setGrouping- Used()方法实现数字的分组。
import java.text.DecimalFormat;
public class DecimalMethod {
public static void main(String[] args) {
DecimalFormat myFormat = new DecimalFormat();
myFormat.setGroupingSize(2); //设置将数字分组为2
String output = myFormat.format(123456.789);
System.out.println("将数字以每两个数字分组 "+output);
myFormat.setGroupingUsed(false); //设置不允许数字进行分组
String output2 = myFormat.format(123456.789);
System.out.println("不允许数字分组 "+output2);
}
}
在Eclipse中运行本实例,运行结果如下图所示。