为了解决例如数学问题、随机问题、商业货币问题、科学技术问题等数字处理问题,Java提供了许多数字处理类,包括:
【DecimalFormat类】用于格式化数字;
【Math类】为各种数学计算提供了工具方法;
【Random类】为处理随机数问题提供了各种方法;
【BigInteger类】与【BigDecimal类】为所有大数字的处理提供了相应的数学运算操作方法。
1.数字格式化
在Java中没有格式化的数据遵循一下原则:
a.如果数据绝对值大于0.001并且小于10000000(1千万),使以常规小数表示;
b.如果数据绝对值小于0.001或者大于10000000(1千万),使用科学计数法表示;
在Java中使用java.text.DecimalFormat格式化数字为指定形式后输出,以满足实际需要;DecimalFormat类是NumberFormat类的一个子类,用于格式化十进制数字,可以将数字格式化为整数、浮点数、百分比数等,并且可以为要输出的数字加上单位或控制精度;使用时在实例化DecimalFormat对象时传递数字格式或通过DecimalFormat类中的applyPattern()方法来实现数字格式化。
1.1 实例化DecimalFormat对象时传递数字格式
1.2 通过DecimalFormat类中的applyPattern()方法
字符 | 说明 |
0 | 代表阿拉伯数字,使用特殊字符“0”表示数字的一位阿拉伯数字,如果该位不存在数字,则显示0 |
# | 代表阿拉伯数字,使用特殊字符“#”表示数字的一位阿拉伯数字,如果 该位不存在数字,则不显示 |
. | 小数分割符或货币系数分隔符 |
- | 负号 |
, | 分组分隔符 |
E | 分隔科学计数法中的尾数和指数 |
% | 本符号放置在数字的前缀或后缀,将数字乘以100显示为百分数 |
\u2030 | 本符号放置在数字的前缀或后缀,将数字乘以1000显示为百分数 |
\u00A4 | 本符号放置在数字的前缀或后缀,作为货币记号 |
' | 本符号位单引号,当上述特殊字符出现在数字中时,且为特殊符号添加了单引号,系统会将这些特殊符号视为普通符号处理 |
package classInfo;
import java.text.DecimalFormat;
public class DecimalFormatSimpleDemo {
//使用实例化对象时设置格式化格式
public static void SimpleFormat(String pattern, double value) {
DecimalFormat myFormat = new DecimalFormat(pattern); //实例化DecimalFormat对象
String outPut = myFormat.format(value); //将数字进行格式化
System.out.println(value + " " + pattern + " " + outPut);
}
//使用applyPattern()方法对数字进行格式化
public static void UseApplyPatternMethodFormat(String pattern, double value) {
DecimalFormat myFormat = new DecimalFormat(); //实例化DecimalFormat对象
myFormat.applyPattern(pattern); //调用applyPattern()方法设置格式化模板
String outPut = myFormat.format(value); //将数字进行格式化
System.out.println(value + " " + pattern + " " + outPut);
}
public static void main(String[] args) {
SimpleFormat("###,###.###", 123456.789); //调用静态SimpleFormat()方法:123,456.789
SimpleFormat("0000000000.###kg", 123456.789); //在数字后面加上单位:0000123456.789kg
//按照格式化模板格式化数字,不存在的位以0显示
SimpleFormat("0000000.000", 123.78); //0000123.780
//调用静态UseApplyPatternMethodFormat()方法
UseApplyPatternMethodFormat("###.####%", 0.789); //将数字转换为百分数形式: 78.9%
UseApplyPatternMethodFormat("###.##", 1234.232); //将小数点后格式化为2位: 1234.23
UseApplyPatternMethodFormat("000.00\u2030", 0.789); //将数字转换为千分位数表示: 789.00‰
}
}
输出:
123456.789 ###,###.### 123,456.789
123456.789 0000000000.###kg 0000123456.789kg
123.78 0000000.000 0000123.780
0.789 ###.####% 78.9%
1234.232 ###.## 1234.23
0.789 000.00‰ 789.00‰
1.3 特殊方法对数字进行格式化
1.3.1 DecimalFormat.setGroupingSize(int value);
此方法设置格式化数字分组的大小;
1.3.2 DecimalFormat.setGroupingUsed(boolean value);
此方法设置是否可以对数字进行分组操作;
DecimalFormat myFormat = new DecimalFormat(); //实例化DecimalForamt类对象
myFormat.setGroupingSize(2); //设置将数字分组的大小
myForamt.setGroupingUsed(false); //设置是否支持分组
package classInfo;
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("将数字以每2个数字分组:" + outPut);
myFormat.setGroupingUsed(false);
String outPut2 = myFormat.format(123456.789);
System.out.println("不允许数字分组:" + outPut2);
}
}
输出:
将数字以每2个数字分组:12,34,56.789
不允许数字分组:123456.789