紧凑数字格式化简介
Java 12 引入了紧凑格式化功能,我们可以将长数字格式化为十进制、货币或百分比的简短形式或长形式。例如,1000 可以格式化为 1K。这对于空间有限或者要求以简短形式显示数字的情况非常有用,比如用 K 表示千,M 表示百万,B 表示十亿等。我们还可以使用自定义字符串来显示大数。
创建 CompactNumberFormat 实例
为了为某个区域设置创建 CompactNumberFormat 的实例,您可以使用 NumberFormat 相关的内置方法。
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
这里我们为 US 区域设置了短格式风格,这意味着 1000 将表示为 1K。同样,我们可以为长格式创建一个实例,如下面所示。
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.LONG);
在这种情况下,1000 将表示为 1 千等。
格式化值
一旦创建了 formatter,我们可以使用 format()
方法来获取所需的格式化数字字符串。
String formatted = formatter.format(1000);
formatted = formatter.format(1000000);
紧凑数字格式化示例
在下面的例子中,我们打印了使用紧凑数字格式化获取的长格式和短格式字符串。
package com.tutorialspoint;
import java.text.NumberFormat;
import java.util.Locale;
public class Tester {
public static void main(String[] args) {
NumberFormat formatter = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.LONG);
System.out.println("Long Formats");
System.out.println(formatter.format(1000));
System.out.println(formatter.format(1000 * 1000));
System.out.println(formatter.format(1000 * 1000 * 1000));
formatter = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.SHORT);
System.out.println("Short Formats");
System.out.println(formatter.format(1000));
System.out.println(formatter.format(1000 * 1000));
System.out.println(formatter.format(1000 * 1000 * 1000));
}
}
编译并运行上述程序,将产生以下结果:
Long Formats
1 thousand
1 million
1 billion
Short Formats
1K
1M
1B
紧凑数字格式化与小数位数
默认的小数位数设置为零,但是我们可以使用下面的方法设置最小小数位数。
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
formatter.setMinimumFractionDigits(3);
System.out.println(formatter.format(10012));
示例:带小数位数的紧凑数字格式化
在下面的例子中,我们打印了使用紧凑数字格式化获取的长格式和短格式字符串。
package com.tutorialspoint;
import java.text.NumberFormat;
import java.util.Locale;
public class Tester {
public static void main(String[] args) {
NumberFormat formatter = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.SHORT);
System.out.println("Without using Fractions");
System.out.println(formatter.format(10012));
System.out.println(formatter.format(10000012));
formatter.setMinimumFractionDigits(2);
System.out.println("Using Fractions");
System.out.println(formatter.format(10012));
System.out.println(formatter.format(10000012));
}
}
编译并运行上述程序,将产生以下结果:
Without using Fractions
10K
10M
Using Fractions
10.01K
10.00M