java关于数字处理的详解
java的数字处理,这里主要讲的是两个类,一个是抽象类NumberFormat,以及该抽象类的具体子类DecimalFormat
一,NumberFormat
NumberFormat类是所有数值格式的基类。此类提供格式化和解析数值的接口。 NumberFormat类是一个抽象类,是Format的子类,因此不能使用new的方式创建对象,在使用时可以直接使用NumberFormat类中提供的静态方法为其实例化。 NumberFormat类主要是用于国际化的数字格式化。它可以用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定。
它的具体用法如下所示:
double exFormat01 = 12345.67;
double exFormat02 = 1234567.89;
double exFormat03 = 0.51;
// 得到操作系統默认的格式化对象
// 通过调用getInstance这个方法,进行实例化
// 所有的getInstance方法,它的返回值都为String类型
NumberFormat myFormat = NumberFormat.getInstance();
System.out.println("default format: " + myFormat.format(exFormat01));
// 通过Locale.地区名 来获得不同地区的计数格式
NumberFormat usFormat = NumberFormat.getInstance(Locale.US);
System.out.println("US format: " + usFormat.format(exFormat01));
NumberFormat chFormat = NumberFormat.getInstance(Locale.CHINA);
System.out.println("CH format: " + chFormat.format(exFormat01));
NumberFormat jaFormat = NumberFormat.getInstance(Locale.JAPAN);
System.out.println("JA format: " + jaFormat.format(exFormat01));
System.out.println("------华丽的-----------------------分割线-----");
// 通过调用getIntegerInstance()获得以整数格式展示的表达式
NumberFormat intFormat = NumberFormat.getIntegerInstance();
System.out.println("integer format: " + intFormat.format(exFormat01));
System.out.println("------华丽的-----------------------分割线-----");
// 通过调用getCurrencyInstance()获得以货币格式展示的表达式,通过Locale.地区名 来获得不同地区的货币格式
NumberFormat curDefFormat = NumberFormat.getCurrencyInstance();
System.out.println("default currency format: " + curDefFormat.format(exFormat02));
NumberFormat curUSFormat = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println("US currency format: " + curUSFormat.format(exFormat02));
System.out.println("------华丽的-----------------------分割线-----");
// 通过调用getPercentInstance()获得以百分比格式展示的表达式
NumberFormat perFormat = NumberFormat.getPercentInstance();
System.out.println("percent format: " + perFormat.format(exFormat03));
System.out.println("------华丽的-----------------------分割线-----");
NumberFormat numFormat = NumberFormat.getInstance();
Number num;
try {
// 通过调用parse方法可以将字符串转换成Number类型
num = numFormat.parse("1,234,567.8");
// 再通过Number的xxxValue()方法将Number类型转换成基本数据类型
double d = num.doubleValue();
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace();
}
运行结果如图所示:
二,DecimalFormat
DecimalFormat类是NumberFormat类的一个具体子类,用于格式化十进制数字。 DecimalFormat类可以直接使用new关键字创建对象。 DecimalFormat类可以根据指定的模式对数字进行格式化。
常用的模式: # 如果是0不表示
0 0也表示
. 小数分隔符
, 分隔符分组分隔符
% 乘以100并显示为百分数
\u00A4 货币格式
它的具体用法如下所示:
// DecimalFormat是NumberFormat的具体子类,可以通过new实例化
DecimalFormat exFormat1 = new DecimalFormat("###,###.###");
System.out.println("format: " + exFormat1.format(12340.56));
System.out.println("format: " + exFormat1.format(1234567890.12345));
System.out.println("------华丽的-----------------------分割线-----");
DecimalFormat exFormat2 = new DecimalFormat("000,000.000");
System.out.println("format: " + exFormat2.format(1230.06));
System.out.println("format: " + exFormat2.format(1234567890.10234));
System.out.println("------华丽的-----------------------分割线-----");
// \u00A4货币形式
DecimalFormat exFormat3 = new DecimalFormat("\u00A4#,###.###");
System.out.println("format: " + exFormat3.format(1234.56));
System.out.println("------华丽的-----------------------分割线-----");
// 百分号形式
DecimalFormat exFormat4 = new DecimalFormat("000%");
System.out.println("format: " + exFormat4.format(0.51));
exFormat4.applyPattern("###%");
System.out.println("format: " + exFormat4.format(0.51));
System.out.println("------华丽的-----------------------分割线-----");
double exValue5 = 0.526;
DecimalFormat exFormat5 = new DecimalFormat("'percent is' ###.#%");
System.out.println(exFormat5.format(exValue5));
System.out.println("----------------------------------");
DecimalFormat exFormat = new DecimalFormat("\u00A4###,###.###");
Number num;
try {
num = exFormat.parse("¥1,234,567.8");
double d = num.doubleValue();
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace();
}
运行如图所示: