数字格式化-Java数字处理

数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品 价格,需要保留两位有效数字。数字格式化操作主要针对的是浮点型数 据,包括double型和float型数据。在Java中使用java.text.DecimalFormat 格式化数字,本节将着重讲解DecimalFormat类。

在Java中没有格式化的数据遵循以下原则:

  • 如果数据绝对值大于0.001并且小于10000000,使以常规小数形式 表示。
  • 如果数据绝对值小于0.001或者大于10000000,使用科学记数法表 示。

由于上述输出格式不能满足解决实际问题的要求,通常将结果格式 化为指定形式后输出。在Java中可以使用DecimalFormat类进行格式化操作。

DecimalFormat是NumberFormat的一个子类,用于格式化十进制数 字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该 类可以为要输出的数字加上单位或控制数字的精度。一般情况下可以在 实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat 类中的applyPattern()方法来实现数字格式化。

当格式化数字时,在DecimalFormat类中使用一些特殊字符构成一 个格式化模板,使数字按照一定的特殊字符规则进行匹配。在表中列举了格式化模板中的特殊字符及其所代表的含义。

DecimalFormat类中特殊字符说明
DecimalFormat类中特殊字符说明

下面以实例说明数字格式化的使用。

【例】在项目中创建DecimalFormatSimpleDemo类,在类中分别 定义SimgleFormat()方法和UseApplyPatternMethodFormat()方法实现两种 格式化数字的方式。

import java.text.*;

public class DecimalFormatSimpleDemo {
	// 使用实例化对象时设置格式化模式
	static public void SimgleFormat(String pattern, double value) {
		// 实例化DecimalFormat对象
		DecimalFormat myFormat = new DecimalFormat(pattern); 
		String output = myFormat.format(value); // 将数字进行格式化
		System.out.println(value + " " + pattern + " " + output);
	}
	
	// 使用applyPattern()方法对数字进行格式化
	static public void UseApplyPatternMethodFormat(String pattern, double value) {
		DecimalFormat myFormat=new DecimalFormat();//实例化DecimalFormat对象
		myFormat.applyPattern(pattern); // 调用applyPatten()方法设置格式化模板
		System.out
				.println(value + " " + pattern + " " + myFormat.format(value));
	}
	
	public static void main(String[] args) {
		SimgleFormat("###,###.###", 123456.789);// 调用静态SimgleFormat()方法
		SimgleFormat("00000000.###kg", 123456.789); // 在数字后加上单位
		// 按照格式模板格式化数字,不存在的位以0显示
		SimgleFormat("000000.000", 123.78);
		// 调用静态UseApplyPatternMethodFormat()方法
		UseApplyPatternMethodFormat("#.###%", 0.789); // 将数字转换为百分数形式
		// 将小数点后格式化为两位
		UseApplyPatternMethodFormat("###.##", 123456.789);
		// 将数字转化为千分数形式
		UseApplyPatternMethodFormat("0.00\u2030", 0.789);
	}
}

最后在Eclipse中运行上述代码,结果如图所示。

数字格式化
数字格式化

在本实例中可以看到,代码的第一行使用import关键字将 java.text.DecimalFormat这个类包含进来,这是告知系统下面的代码将使 用到DecimalFormat类。然后定义了两个格式化数字的方法,这两个方 法的参数都为两个,分别代表数字格式化模板和具体需要格式化的数 字。虽然这两个方法都可以实现数字的格式化,但采用的方式有所不 同,SimgleFormat()方法是在实例化DecimalFormat对象时设置数字格式 化模板,而UseApplyPatternMethodFormat()方法是在实例化 DecimalFormat对象后调用applyPattern()方法设置数字格式化模板。最 后,在主方法中根据不同形式模板格式化数字。在结果中可以看到 以“0”特殊字符构成的模板进行格式化时,当数字某位不存在时,将显 示0;而以“#”特殊字符构成的模板进行格式化操作时,格式化后的数字 位数与数字本身的位数一致。

在DecimalFormat类中除了可通过格式化模板来格式化数字之外, 还可以使用一些特殊方法对数字进行格式化设置。例如:

特殊方法对数字进行格式化

在上述代码中,setGroupingSize()方法设置格式化数字的分组大 小,setGroupingUsed()方法设置是否可以对数字进行分组操作。为了使 读者更好地理解这两个方法的使用,来看下面的实例。

【例】在项目中创建DecimalMethod类,在类的主方法中调用 setGroupingSize()与setGrouping-Used()方法实现数字的分组。

import java.text.*;

import java.text.*;

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中运行本实例,运行结果如图所示。

 使用setGroupingSize()与setGroupingUsed()方法设置数字格式
使用setGroupingSize()与setGroupingUsed()方法设置数字格式

发表评论