Java 简明教程

Java - Compact Number Formatting

Java 12 引入了 compact formatting,使用该方法可将十进制、货币或百分比的长数字格式化为短格式或长格式。例如,将 1000 格式化为 1K。此方法非常适合在空间受限或要求以短格式(如千的 K、百万的 M、十亿的 B 等)显示数字时使用。我们还可以使用自定义 strings 来显示大数字。

Create a CompactNumberFormat Instance

要为区域设置创建 CompactNumberFormat 的实例,可以使用 NumberFormat 的相关内置方法。

NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);

我们在此创建一个用于美国区域设置和短格式样式的格式化程序,这意味着 1000 将由 1K 表示。同样,我们可以创建一个用于长格式的实例,如下所示。

NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.LONG);

在这种情况下,1000 将由 1000 表示,依此类推。

Format the Value

创建格式化程序后,我们可以使用 format() 方法获取所需的格式化数字字符串。

//1000 will be formatted as 1K
String formatted = formatter.format(1000)

//1000000 will be formatted as 1M
formatted = formatter.format(1000000)

Example of Compact Number Formatting

在以下示例中,我们使用紧凑数字格式打印长格式字符串和短格式字符串。

package com.tutorialspoint;

import java.text.NumberFormat;
import java.util.Locale;

public class Tester {
   public static void main(String[] args) {
      // Create the formatter instance for Long format
      NumberFormat formatter = NumberFormat.getCompactNumberInstance(
         Locale.US, NumberFormat.Style.LONG);

      System.out.println("Long Formats");
      // get the formatted strings
      System.out.println(formatter.format(1000));
      System.out.println(formatter.format(1000 * 1000));
      System.out.println(formatter.format(1000 * 1000 * 1000));

      // Create the formatter instance for Short format
      formatter = NumberFormat.getCompactNumberInstance(
         Locale.US, NumberFormat.Style.SHORT);

      // get the formatted strings
      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 and Fraction Digits

默认情况下,小数位数设置为零,但我们也可以使用以下方法设置最小小数位数。

NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
formatter.setMinimumFractionDigits(3);

// It will print 10.012K
System.out.println(formatter.format(10012));

Example: Compact Number Formatting with Fractions

在以下示例中,我们使用紧凑数字格式打印长格式字符串和短格式字符串。

package com.tutorialspoint;

import java.text.NumberFormat;
import java.util.Locale;

public class Tester {
   public static void main(String[] args) {
      // Create the formatter instance for Short format
      NumberFormat formatter = NumberFormat.getCompactNumberInstance(
         Locale.US, NumberFormat.Style.SHORT);
      System.out.println("Without using Fractions");
      // get the formatted strings
      System.out.println(formatter.format(10012));
      System.out.println(formatter.format(10000012));

      // set the minimum 2 fraction digits to display
      formatter.setMinimumFractionDigits(2);
      System.out.println("Using Fractions");
      // get the formatted strings
      System.out.println(formatter.format(10012));
      System.out.println(formatter.format(10000012));
   }
}

让我们编译并运行上述程序,这将生成以下结果 −

Without using Fractions
10K
10M
Using Fractions
10.01K
10.00M