# 精简数字格式

> 原文： [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 中精简数字格式**的问题**。

学习愉快！