在解决实际问题时,对数字的处理是非常普遍的,如数学问题、随机问题、商业货币问题、科学计数问题等。为了应对以上问题,Java提供了处理相关问题的类,包括DecimalFormat类(用于格式化数字)、Math类(为各种数学计算提供了工具方法)、Random类(为Java处理随机数问题提供了分钟方法)、BigInteger类与BigDecimal类(为所有大数字的处理提供了相应的数学运算操作方法)。
下面一一介绍这个数字处理类:
一、数字格式化
在Java中使用java.text.DecimalFormat格式化数字。
在Java中没有格式化的数据遵循以下原则:
1.如果数据绝对值大于0.001并且小于10000000,Java将以常规小数形式表示。
2.如果数据绝对值小于0.001或者大于10000000,使用科学记数法表示。
DecimalFormat是NumberFormat的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况下可以在实例化DecimalFormat对象时传递数字格式化,也可以通过DecimalFormat类中的applyPattern()方法来实现数字格式化。
DecimalFormat类中的格式化模板中的特殊字符
字符 | 说明 |
0 | 代表阿拉伯数字,使用特殊字符“0”表示数字的一位阿拉伯数字,如果该位不存在数字,则显示0 |
# | 代表阿拉伯数字,使用特殊字符“#”表示数字的一位阿拉伯数字,如果该位存在数字,则显示字符;如果该位不存在数字,则不显示 |
. | 小数分隔符或货币小数分隔符 |
- | 负号 |
, | 分组分隔符 |
E | 分隔科学记数法中的尾数和指数 |
% | 本符号放置在数字的前缀或后缀,将数字乘以100显示为百分数 |
\u2030 | 本符号放置在数字的前缀或后缀,将数字乘以1000显示为千分数 |
\u00A4 | 本符号放置在数字的前缀或后缀,作为货币记号 |
' | 本符号为单引号,当上述特殊字符出现在数字中时,应为特殊符号添加单引号,系统会将此符号视为普通符号处理 |
package hello;
import java.text.DecimalFormat; //引入 类
public class DecimalFormatSimpleDemo {
//使用实例化对象时设置格式模式
static public void SimpleFormat(String pattern,double value) {
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();
myFormat.applyPattern(pattern);
System.out.println(value+" "+pattern+" "+myFormat.format(value));
}
public static void main(String[] args) {
SimpleFormat("###,###.###",123456.789);
SimpleFormat("00000000.###kg",123456.789);
SimpleFormat("000000.000",123.78);
UseApplyPatternMethodFormat("#.###%",0.789);
UseApplyPatternMethodFormat("###.##",123456.789);
UseApplyPatternMethodFormat("0.00\u2030",0.789);
}
}
从以上两个方法的结果可以看出以“0” 特殊字符构成的模板进行格式化时,当数字某位不存在时,将显示0;而以“#” 特殊字符构成的模板进行格式化操作时,格式化后的数字位数与数字本身的位数一致。
在DecimalFormat类中除了可以设置格式化模式来格式化数字之外,还可以使用一些特殊方法对数字进行格式化设置。
DecimalFormat myFormat = new DecimalFormat(); //实例化DecimalFormat类对象
myFormat.setGroupingSize(2); //设置数字分组的大小
myFormat.setGroupingUsed(false); //设置是否支持分组
import java.text.DecimalFormat;
public class DeciamlMethod {
public static void main(String[] args) {
// TODO 自动生成的方法存根
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);
}
}