🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 精简数字格式 > 原文: [https://howtodoinjava.com/java12/compact-number-format/](https://howtodoinjava.com/java12/compact-number-format/) 了解如何将语言环境敏感的精简/较短格式应用于通用编号,例如小数,货币和百分比。 它是在 Java 12 中的`CompactNumberFormat`类中添加的。 例如,可以将数字(例如 1000)格式化为“ 1K”(短样式)或“ 1000”(长样式)。 ## 1\. `CompactNumberFormat`类 [`CompactNumberFormat`](https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/text/CompactNumberFormat.html)是[`NumberFormat`](https://howtodoinjava.com/java/string/float-to-string-format-decimal-points/)的具体子类,它以精简形式格式化十进制数。 精简数字格式设计用于空间受限的环境,并且格式化的字符串可以在该有限的空间中显示。 精简数字格式是指基于为给定语言环境提供的模式,以较短的形式表示数字。 #### 1.1 创建新的`CompactNumberFormat`实例 要获取语言环境的`CompactNumberFormat`,请使用`NumberFormat`给出的工厂方法之一。 ```java NumberFormat fmt = NumberFormat.getCompactNumberInstance( new Locale("hi", "IN"), NumberFormat.Style.SHORT); NumberFormat fmt = NumberFormat.getCompactNumberInstance( Locale.US, NumberFormat.Style.LONG); ``` #### 1.2 自定义`CompactNumberFormat`实例 我们还可以创建自定义的数字格式,在其中可以定义如何使用`CompactNumberFormat(String, DecimalFormatSymbols, String[])`构造器以较短的形式表示数字。 ```java final String[] compactPatterns = {"", "", "", "0k", "00k", "000k", "0m", "00m", "000m", "0b", "00b", "000b", "0t", "00t", "000t"}; final DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(Locale.GERMANY); final CompactNumberFormat customCompactNumberFormat = new CompactNumberFormat( decimalFormat.toPattern(), decimalFormat.getDecimalFormatSymbols(), compactPatterns); ``` * 精简数字`compactPatterns`以一系列模式表示,其中每个模式用于格式化一系列数字。 * 数组中最多可以提供 15 个样式,但是第一个提供的样式始终对应于`10 ^ 0`。 * 基于数组元素的数量,这些值的范围为`10 ^ 0`至`10 ^ 14`。 ## 2\. 精简数字格式示例 #### 2.1 简单格式化 Java 程序以精简数字格式格式化数字。 ```java import java.text.NumberFormat; import java.util.Locale; public class Main { public static void main(String[] args) { NumberFormat fmt = NumberFormat .getCompactNumberInstance(Locale.US, NumberFormat.Style.LONG); System.out.println( fmt.format(100) ); System.out.println( fmt.format(1000) ); System.out.println( fmt.format(10000) ); System.out.println( fmt.format(100000) ); NumberFormat fmtShort = NumberFormat .getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); System.out.println( fmtShort.format(100) ); System.out.println( fmtShort.format(1000) ); System.out.println( fmtShort.format(10000) ); System.out.println( fmtShort.format(100000) ); } } ``` 程序输出。 ```java 100 1 thousand 10 thousand 100 thousand 100 1K 10K 100K ``` #### 2.2 设置小数 设置数字的小数部分中允许的最小位数。 默认情况下,小数部分设置为`0`个数字。 ```java import java.text.NumberFormat; import java.util.Locale; public class Main { public static void main(String[] args) { NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); fmt.setMinimumFractionDigits(3); System.out.println( fmt.format(10000) ); System.out.println( fmt.format(10012) ); System.out.println( fmt.format(100201) ); System.out.println( fmt.format(1111111) ); } } ``` 程序输出: ```java 10.000K 10.012K 100.201K 1.111M ``` ## 3\. 精简数字解析示例 Java 程序将精简数字解析为长模式。 ```java import java.text.NumberFormat; import java.util.Locale; public class Main { public static void main(String[] args) throws Exception { NumberFormat fmt = NumberFormat .getCompactNumberInstance(Locale.US, NumberFormat.Style.LONG); System.out.println( fmt.parse("100") ); System.out.println( fmt.parse("1 thousand") ); System.out.println( fmt.parse("10 thousand") ); System.out.println( fmt.parse("100 thousand") ); } } ``` 程序输出: ```java 100 1000 10000 100000 ``` 向我提供有关 Java 12 中精简数字格式**的问题**。 学习愉快!