Java 简明教程
Java - Compact Number Formatting
Java 12 引入了 compact formatting,使用该方法可将十进制、货币或百分比的长数字格式化为短格式或长格式。例如,将 1000 格式化为 1K。此方法非常适合在空间受限或要求以短格式(如千的 K、百万的 M、十亿的 B 等)显示数字时使用。我们还可以使用自定义 strings 来显示大数字。
Java 12 introduces compact formatting where we can format long numbers for decimals, currency, or percentages into short form or long form. For example 1000 to 1K. This is very useful where we’ve limited space or requirements to show numbers in short form like K for thousand, M for million B for Billon, and so on. We can use custom strings as well to display large numbers.
Create a CompactNumberFormat Instance
要为区域设置创建 CompactNumberFormat 的实例,可以使用 NumberFormat 的相关内置方法。
To create an instance of CompactNumberFormat for a locale, you can use the related built-in method of NumberFormat.
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
我们在此创建一个用于美国区域设置和短格式样式的格式化程序,这意味着 1000 将由 1K 表示。同样,我们可以创建一个用于长格式的实例,如下所示。
Here we’re creating a formatter for US Locale and short format style, that means 1000 will be represented by 1K. Similarly we can create an instance for Long Format as shown below.
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.LONG);
在这种情况下,1000 将由 1000 表示,依此类推。
In this case, 1000 will be represented by 1 thousand and so.
Format the Value
创建格式化程序后,我们可以使用 format() 方法获取所需的格式化数字字符串。
Once formatter is created, we can use format() method to get the required formatted number string.
//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
在以下示例中,我们使用紧凑数字格式打印长格式字符串和短格式字符串。
In following example, we’re printing long as well as short formatted string retrived using 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));
}
}
让我们编译并运行上述程序,这将生成以下结果 −
Let us compile and run the above program, this will produce the following result −
Long Formats
1 thousand
1 million
1 billion
Short Formats
1K
1M
1B
Compact Number Formatting and Fraction Digits
默认情况下,小数位数设置为零,但我们也可以使用以下方法设置最小小数位数。
By default fraction digit is set as zero, but we can set minimum fraction digits as well using following method.
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
在以下示例中,我们使用紧凑数字格式打印长格式字符串和短格式字符串。
In following example, we’re printing long as well as short formatted string retrived using 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 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));
}
}
让我们编译并运行上述程序,这将生成以下结果 −
Let us compile and run the above program, this will produce the following result −
Without using Fractions
10K
10M
Using Fractions
10.01K
10.00M