Java NumberFormat使用详解

Java中的NumberFormat是一个用于格式化数字的抽象类。它可以格式化数字为特定的格式,比如货币、百分数、科学计数法等。在使用时,可以使用其子类DecimalFormat对数字进行格式化。下面是NumberFormat和DecimalFormat的使用详解及示例:

NumberFormat的使用

首先,需要使用静态工厂方法NumberFormat.getInstance()或NumberFormat.getNumberInstance()来获取NumberFormat实例。

NumberFormat nf = NumberFormat.getInstance();  // 获取默认的数值格式化实例

可以使用format()方法将数字格式化成字符串。

String formatted = nf.format(1234567.89);
System.out.println(formatted);  // 输出: 1,234,567.89(默认格式)

除了使用默认的格式外,还可以使用setMinimumFractionDigits()和setMaximumFractionDigits()方法设置小数点后的最小和最大位数,使用setMinimumIntegerDigits()和setMaximumIntegerDigits()方法设置整数部分的最小和最大位数。

NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(2);
nf.setMinimumIntegerDigits(3);
nf.setMaximumIntegerDigits(6);

String formatted = nf.format(123.456);
System.out.println(formatted);  // 输出: 123.46(小数点后2位,整数部分3位)

DecimalFormat的使用

DecimalFormat是NumberFormat的一个具体实现,它可以按照指定格式对数字进行格式化。同样,需要使用静态工厂方法DecimalFormat.getInstance()来获取DecimalFormat实例。

DecimalFormat df = DecimalFormat.getInstance();  // 获取默认的数值格式化实例

可以使用applyPattern()方法设置格式化模式,使用format()方法将数字格式化成字符串。

DecimalFormat df = new DecimalFormat("#,###.##");
String formatted = df.format(1234567.89);
System.out.println(formatted);  // 输出: 1,234,567.89(#,###.##格式)

DecimalFormat的格式化模式可以包含以下特殊字符:

#:表示一个可选的数字。
0:表示一个必须存在的数字。
.:表示小数点。
,:表示千位分隔符。
%:表示百分数。
E:表示科学计数法中的指数。

下面是一个更复杂的示例,展示了如何将数字格式化成货币、百分数、科学计数法等格式。

double number = 1234567.89;
DecimalFormat currencyFormat = new DecimalFormat("$#,##0.00");
DecimalFormat percentFormat = new DecimalFormat("##0.00%");
DecimalFormat scientificFormat = new DecimalFormat("0.###E0");

String currency = currencyFormat.format(number);
String percent = percentFormat.format(number);
String scientific = scientificFormat.format(number);

System.out.println(currency);   // 输出: $1,234,567.89(货币格式)
System.out.println(percent);    // 输出: 123,456.79%(百分数格式)
System.out.println(scientific);