原文: https://howtodoinjava.com/java12/compact-number-format/

了解如何将语言环境敏感的精简/较短格式应用于通用编号,例如小数,货币和百分比。 它是在 Java 12 中的CompactNumberFormat类中添加的。

例如,可以将数字(例如 1000)格式化为“ 1K”(短样式)或“ 1000”(长样式)。

1. CompactNumberFormat

CompactNumberFormatNumberFormat的具体子类,它以精简形式格式化十进制数。 精简数字格式设计用于空间受限的环境,并且格式化的字符串可以在该有限的空间中显示。

精简数字格式是指基于为给定语言环境提供的模式,以较短的形式表示数字。

1.1 创建新的CompactNumberFormat实例

要获取语言环境的CompactNumberFormat,请使用NumberFormat给出的工厂方法之一。

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[])构造器以较短的形式表示数字。

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 ^ 010 ^ 14

2. 精简数字格式示例

2.1 简单格式化

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) );
    }
}

程序输出。

100
1 thousand
10 thousand
100 thousand

100
1K
10K
100K

2.2 设置小数

设置数字的小数部分中允许的最小位数。 默认情况下,小数部分设置为0个数字。

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) );
    }
}

程序输出:

10.000K
10.012K
100.201K
1.111M

3. 精简数字解析示例

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") );
    }
}

程序输出:

100
1000
10000
100000

向我提供有关 Java 12 中精简数字格式的问题

学习愉快!