一、数字格式化
数字的格式化在解决实际问题时使用非常普遍,如表示某超市的商品价格,需要保留两位有效数字。 Java 主要对浮点型数据进行数字格式化操作,其中浮点型数据包括 double 型和 float 型数据,在 Java 中使用 java.text.DecimalFormat 格式化数字。
在 Java 中没有格式化的数据遵循以下原则 :
( 1 )如果数据绝对值大于 0.001 并且小于 10000000 , Java 将以常规小数形式表示。
( 2 )如果数据绝对值小于 0.001 或者大于 10000000 , 使用科学计数法表示。
由于上述输出格式不能满足实际问题的要求,通常将结果格式化为指定形式后输出。在 Java 中可以使用 DecimalFormat 类进行格式化操作。
DecimalFormat 是 NumberFormat 的一个子类没用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、科学计数法、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况下可以在实例化 DecimalFormat 对象时传递数字格式,也可以通过 DecimalFormat 类中的 applyPattern() 方法来实现数字格式化。
当格式化数字时,在 DecimalFormat 类中使用一些特殊字符构成一个格式化模板,是数字按照一定的特殊字符规则进行匹配。如下 :
DecimalFormat 类中特殊字符说明
字符
说明
0
代表阿拉伯数字,使用特殊字符 “ 0 ” 表示数字的一位阿拉伯数字,
如果该位不存在数字,则显示 0
#
代表阿拉伯数字,使用特殊字符 “ # ” 表示数字的一位阿拉伯数字,
如果该为存在数字,则显示字符;如果该位不存在数字,则不显示
.
小数分隔符或货币小数分隔符
–
负号
,
分组分隔符
E
分隔科学计数法中的尾数和指数
%
本符号放置在数字的前缀或后缀,将数字乘以 100 显示为百分数
\u2030
本符号放置在数字的前缀或后缀,将数字乘以 10000 显示为千分数
\u00A4
本符号放置在数字的前缀或或追,作为货币记号
‘
本符号为单引号,当上述特殊字符出现在数字中时,应为特殊字符添加单引号,
系统会将此符号视为普通符号处理
eg :创建类,在类中分别定义 SimgleForm() 方法和 UseApplyPatternMethodFormat() 方法实现格式化。
import java.text.DecimalFormat;
public class DecimalFormatSimpleDemo {
//使用实例化对象时设置格式化
static public void SimpleFormat(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 对象
DecimalFormat myFormat = new DecimalFormat(pattern);
myFormat.applyPattern(pattern); //调用 applyPattern() 方法设置格式化模板
System.out.println(value + ” ” + pattern + ” ” + myFormat.format(value));
}
public static void main(String[] args) {
SimpleFormat(“###,###.###”, 123456.789); //调用静态 SimFormat() 方法
SimpleFormat(“00000000.###kg”, 123456.789); //在数字后面加上单位
//按照格式模板格式化数字,不存的位以 0 显示
SimpleFormat(“000000.000”, 123.78);
//田勇静态 UseApplyPatternMethodFormat() 方法
UseApplyPatternMethodFormat(“#.###%”, 0.789); //将数字转换为百分数形式
//将小数点后格式化为两位
UseApplyPatternMethodFormat(“###.##”, 123456.789);
//将数字转化为千分数形式
UseApplyPatternMethodFormat(“0.00\u2030”, 0.789);
}
}
运行结果为 :
123456.789 ###,###.### 123,456.789
123456.789 00000000.###kg 00123456.789kg
123.78 000000.000 000123.780
0.789 #.###% 78.9%
123456.789 ###.## 123456.79
0.789 0.00‰ 789.00‰
在本例中可以看到 ,代码使用 import 导入了 java.text.DecimalFormat 这个类,这是首先告诉系统下面的代码将使用到 DecimalFormat 类;然后定义两个格式化数字的方法,这两个方法的参数个数都为两个,分别代表数字格式化模板和具体需要格式化的数字,虽然这两个方法都可以实现格式化数字的操作,但使用的方式不同, SimleFormat() 方法是在实例化 DecimalFormat 对象时设置数字格式化模板,而 UseApplyPatternMethodFormat() 方法是在实例化 DecimalFormat 对象后调用 applyPattern() 方法设置数字格式化模板了最后在主方法中根据不同形式模板格式化数字。
在 DecimalFormat 类中定义除了可以设置格式化模板来格式化数字之外,话可以使用一些特殊方法对数字进行格式化设置。 如 :
DecimalFormat myFormat = new DecimalFormat(); //实例化 DecimalFormat 类对象
myFormat.setGroupingSize(2); //设置将数字分组的大小
myFormat.setGroupingUsed(false); //设置是否支持分组
eg :创建类,在类的主方法中调用 setGroupingSize() 与 serGroupingUsed() 方法实现数字的分组。
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);
}
}
运行结果为 :
将数字以每两个数字分组:12,34,56.789
不允许数字分组:123456.789