JDK 12附带紧凑数字格式

JDK 12 Early Access Build 24引入了对紧凑数字格式的支持JDK-8188147(紧凑数字格式支持)CSR的“摘要”是简单的句子,“添加了对JDK中紧凑/短数字格式的支持。” 相同的CSR还提供了详细的“解决方案”部分,该背景提供了为每个语言环境以多种紧凑形式提供数字以及添加到JDK以支持此功能的构造/ API(新类,新枚举,新方法等)的背景。

每个语言环境中数字的紧凑和简短格式的表示均基于Unicode公共语言环境数据存储库(CLDR) 。 新添加的类java.text.CompactNumberFormat具有类级别的Javadoc注释 ,这些注释提供了大量有关如何以“短”和“长”紧凑数字格式表示数字的详细信息。 该类的Javadoc注释还指定与自定义数字格式相关的紧凑数字模式,格式,解析和舍入(默认为RoundingMode.HALF_EVEN )。

Nishit Jain在要求对 JDK 12中增加紧凑数字格式的要求进行审查时写道:

现有的NumberFormat API为格式化和解析数字提供了基于语言环境的支持,其中包括格式化小数,百分数,货币等,但是缺少将数字格式化为人类可读或紧凑形式的支持。 此RFE添加了该功能,以紧凑格式格式化十进制数(例如,在en_US语言环境中为1000-> 1K,1000000-> 1M),这对于显示空间有限的环境很有用,因此可以显示格式化的字符串在那个有限的空间里。 它是由LDML的紧凑数字格式规范定义的。

http://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats

通过代码示例来了解紧凑的数字格式可能是最容易的。 下面的类( CompactNumberFormatDemo )是根据JDK 12 Early Access Build 24编译和执行的。

package dustin.examples.jdk12.format;  
  
import static java.lang.System.out;  
  
import java.text.NumberFormat;  
import java.util.Locale;  
  
/** 
 * Demonstrate Compact Number Format support added to 
 * JDK 12 as of Early Access Build 24 (see also 
 * JDK-8177552: Compact Number Formatting support). 
 */  
public class CompactNumberFormatDemo  
{  
   private static void demonstrateCompactNumberFormatting(final long numberToFormat)  
   {  
      final NumberFormat numberFormatDefault  
         = NumberFormat.getCompactNumberInstance();  
      final NumberFormat numberFormatUsLong  
         = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.LONG);  
      final NumberFormat numberFormatUkShort  
         = NumberFormat.getCompactNumberInstance(Locale.UK, NumberFormat.Style.SHORT);  
      final NumberFormat numberFormatUkLong  
         = NumberFormat.getCompactNumberInstance(Locale.UK, NumberFormat.Style.LONG);  
      final NumberFormat numberFormatFrShort  
         = NumberFormat.getCompactNumberInstance(Locale.FRANCE, NumberFormat.Style.SHORT);  
      final NumberFormat numberFormatFrLong  
         = NumberFormat.getCompactNumberInstance(Locale.FRANCE, NumberFormat.Style.LONG);  
      final NumberFormat numberFormatGrShort  
         = NumberFormat.getCompactNumberInstance(Locale.GERMANY, NumberFormat.Style.SHORT);  
      final NumberFormat numberFormatGrLong  
         = NumberFormat.getCompactNumberInstance(Locale.GERMANY, NumberFormat.Style.LONG);  
      final NumberFormat numberFormatItShort  
         = NumberFormat.getCompactNumberInstance(Locale.ITALY, NumberFormat.Style.SHORT);  
      final NumberFormat numberFormatItLong  
         = NumberFormat.getCompactNumberInstance(Locale.ITALY, NumberFormat.Style.LONG);  
  
      out.println("Demonstrating Compact Number Formatting on '" + numberToFormat + "':");  
      out.println("\tDefault:  " + numberFormatDefault.format(numberToFormat));  
      out.println("\tUS/Long:  " + numberFormatUsLong.format(numberToFormat));  
      out.println("\tUK/Short: " + numberFormatUkShort.format(numberToFormat));  
      out.println("\tUK/Long:  " + numberFormatUkLong.format(numberToFormat));  
      out.println("\tFR/Short: " + numberFormatFrShort.format(numberToFormat));  
      out.println("\tFR/Long:  " + numberFormatFrLong.format(numberToFormat));  
      out.println("\tGR/Short: " + numberFormatGrShort.format(numberToFormat));  
      out.println("\tGR/Long:  " + numberFormatGrLong.format(numberToFormat));  
      out.println("\tIT/Short: " + numberFormatItShort.format(numberToFormat));  
      out.println("\tIT/Long:  " + numberFormatItLong.format(numberToFormat));  
   }  
  
   /** 
    * Main demonstration executable. 
    * @param arguments Command-line arguments: none expected. 
    */  
   public static void main(final String[] arguments)  
   {  
      demonstrateCompactNumberFormatting(15);  
      demonstrateCompactNumberFormatting(150);  
      demonstrateCompactNumberFormatting(1500);  
      demonstrateCompactNumberFormatting(15000);  
      demonstrateCompactNumberFormatting(150000);  
      demonstrateCompactNumberFormatting(1500000);  
      demonstrateCompactNumberFormatting(15000000);  
   }  
}

执行后,以上代码将以下内容写入标准输出:

Demonstrating Compact Number Formatting on '15':
 Default:  15
 US/Long:  15
 UK/Short: 15
 UK/Long:  15
 FR/Short: 15
 FR/Long:  15
 GR/Short: 15
 GR/Long:  15
 IT/Short: 15
 IT/Long:  15
Demonstrating Compact Number Formatting on '150':
 Default:  150
 US/Long:  150
 UK/Short: 150
 UK/Long:  150
 FR/Short: 150
 FR/Long:  150
 GR/Short: 150
 GR/Long:  150
 IT/Short: 150
 IT/Long:  150
Demonstrating Compact Number Formatting on '1500':
 Default:  2K
 US/Long:  2 thousand
 UK/Short: 2K
 UK/Long:  2 thousand
 FR/Short: 2 k
 FR/Long:  2 millier
 GR/Short: 1.500
 GR/Long:  2 Tausend
 IT/Short: 1.500
 IT/Long:  2 mille
Demonstrating Compact Number Formatting on '15000':
 Default:  15K
 US/Long:  15 thousand
 UK/Short: 15K
 UK/Long:  15 thousand
 FR/Short: 15 k
 FR/Long:  15 mille
 GR/Short: 15.000
 GR/Long:  15 Tausend
 IT/Short: 15.000
 IT/Long:  15 mila
Demonstrating Compact Number Formatting on '150000':
 Default:  150K
 US/Long:  150 thousand
 UK/Short: 150K
 UK/Long:  150 thousand
 FR/Short: 150 k
 FR/Long:  150 mille
 GR/Short: 150.000
 GR/Long:  150 Tausend
 IT/Short: 150.000
 IT/Long:  150 mila
Demonstrating Compact Number Formatting on '1500000':
 Default:  2M
 US/Long:  2 million
 UK/Short: 2M
 UK/Long:  2 million
 FR/Short: 2 M
 FR/Long:  2 million
 GR/Short: 2 Mio.
 GR/Long:  2 Million
 IT/Short: 2 Mln
 IT/Long:  2 milione
Demonstrating Compact Number Formatting on '15000000':
 Default:  15M
 US/Long:  15 million
 UK/Short: 15M
 UK/Long:  15 million
 FR/Short: 15 M
 FR/Long:  15 million
 GR/Short: 15 Mio.
 GR/Long:  15 Millionen
 IT/Short: 15 Mln
 IT/Long:  15 milioni

通过Early Access Build 24添加到JDK 12紧凑数字格式支持允许格式化和解析以特定于语言环境的“长”或“短”紧凑形式的数字表示形式。

翻译自: https://www.javacodegeeks.com/2019/01/compact-number-formatting-comes-jdk-12.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值