Java - 紧凑数字格式化
Java 12 引入了 紧凑格式化,我们可以将十进制数、货币或百分比的长数字格式化为短形式或长形式。例如,将 1000 格式化为 1K。这在空间有限或需要以简短形式显示数字时非常有用,例如用 K 表示千、M 表示百万、B 表示十亿,等等。我们还可以使用自定义字符串来显示大数字。
创建 CompactNumberFormat 实例
要为特定 locale 创建 CompactNumberFormat 实例,可以使用 NumberFormat 的相关内置方法。
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
这里我们为 US Locale 和 short format style 创建了一个 formatter,这意味着 1000 将被表示为 1K。同样,我们也可以如以下所示为 Long Format 创建实例。
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.LONG);
在这种情况下,1000 将被表示为 1 thousand,依此类推。
格式化值
创建 formatter 后,我们可以使用 format() 方法获取所需的格式化数字字符串。
//1000 将被格式化为 1K String formatted = formatter.format(1000) //1000000 将被格式化为 1M formatted = formatter.format(1000000)
紧凑数字格式化示例
在以下示例中,我们打印了使用紧凑数字格式化获取的长格式和短格式字符串。
package com.;
import java.text.NumberFormat;
import java.util.Locale;
public class Tester {
public static void main(String[] args) {
// 为 Long format 创建 formatter 实例
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));
// 为 Short format 创建 formatter 实例
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
Compact Number Formatting 和 Fraction Digits
默认情况下,fraction digit 设置为零,但我们也可以使用以下方法设置最小 fraction digits。
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); formatter.setMinimumFractionDigits(3); // 它将打印 10.012K System.out.println(formatter.format(10012));
Example: Compact Number Formatting with Fractions
在以下示例中,我们打印了使用 compact number formatting 获取的长格式和短格式字符串。
package com.;
import java.text.NumberFormat;
import java.util.Locale;
public class Tester {
public static void main(String[] args) {
// 为 Short format 创建 formatter 实例
NumberFormat formatter = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.SHORT);
System.out.println("不使用 Fractions");
// 获取格式化字符串
System.out.println(formatter.format(10012));
System.out.println(formatter.format(10000012));
// 设置最小 2 个 fraction digits 以显示
formatter.setMinimumFractionDigits(2);
System.out.println("使用 Fractions");
// 获取格式化字符串
System.out.println(formatter.format(10012));
System.out.println(formatter.format(10000012));
}
}
让我们编译并运行上述程序,这将产生以下结果 −
不使用 Fractions 10K 10M 使用 Fractions 10.01K 10.00M