成都网站建设开,网站设计公司服务,新安商品混泥土网站建设,域名申请后怎么使用帖子“ 紧凑数字格式到JDK 12 ”已经成为java subreddit线程上讨论的主题 。 在那个线程中表达的与紧凑数字格式表示有关的问题涉及显示的精度数字和显示的紧凑数字模式。 可以通过使用CompactNumberFormat.setMinimumFractionDigits(int)来解决精度数字问题#xff0c;该方法… 帖子“ 紧凑数字格式到JDK 12 ”已经成为java subreddit线程上讨论的主题 。 在那个线程中表达的与紧凑数字格式表示有关的问题涉及显示的精度数字和显示的紧凑数字模式。 可以通过使用CompactNumberFormat.setMinimumFractionDigits(int)来解决精度数字问题该方法在“ 使用JDK 12紧凑数字格式使用最小分数数字 ”一文中进行了详细讨论。 这篇文章解决了第二个问题不喜欢某些语言在预先构建的CompactNumberFormat实例中使用的紧凑模式。 据我所能确定的当然我肯定会遗漏一些东西 CompactNumberFormat上没有任何方法可以在现有CompactNumberFormat实例上设置紧凑数字模式。 但是如果使用CompactNumberFormat的构造函数获取CompactNumberFormat的实例而不是使用NumberFormat的重载静态工厂方法之一则可以通过该构造函数将紧凑数字模式提供给CompactNumberFormat的新实例。 这在下一个代码清单也可以在GitHub上 中得到证明。 /*** Provides an instance of {code CompactNumberFormat} that has been* custom created via that classs constructor and represents an* alternate Germany German representation to that provided by an* instance of {code CompactNumberFormat} obtained via the static* factory methods of {code NumberFormat} for {code Locale.GERMANY}.** return Instance of {code CompactNumberFormat} with customized* alternate German compact pattern representations.*/
private static CompactNumberFormat generateCustomizedGermanCompactNumberFormat()
{final String[] germanyGermanCompactPatterns {, , , 0k, 00k, 000k, 0m, 00m, 000m, 0b, 00b, 000b, 0t, 00t, 000t};final DecimalFormat germanyGermanDecimalFormat acquireDecimalFormat(Locale.GERMANY);final CompactNumberFormat customGermanCompactNumberFormat new CompactNumberFormat(germanyGermanDecimalFormat.toPattern(),germanyGermanDecimalFormat.getDecimalFormatSymbols(),germanyGermanCompactPatterns);return customGermanCompactNumberFormat;
} 上面的代码清单中有三项值得特别强调 CompactNumberFormat(String, DecimalFormatSymbols, String[])构造函数允许将String数组传递到实例以指定紧凑数字模式。 定义紧凑数字模式的String[]的性质在Javadoc中的CompactNumberFormat类中定义该类指出“紧凑数字模式以一系列模式表示其中每个模式用于格式化一系列数字。” 相同的Javadoc提供了一个基于美国语言环境的示例该示例提供了10 0到10 14范围内的这些值而我在此处采用的就是该示例。 可以提供多于或少于15个样式但第一个提供的样式始终对应于10 0 。 Javadoc指出“可以有任意数量的模式它们严格基于索引范围从10 0开始 。” 为了在此进行演示我根据对前面引用的subreddit线程的观察来调整了模式。 我对德语了解不多但是基于SI的后缀的说法很有道理无论如何这仅出于说明目的。 在此示例中我从JDK提供的针对德国德语语言环境 Locale.GERMANY 的DecimalFormat实例中检索了CompactNumberFormat构造函数的其他两个参数。 这样可以确保我的CompactNumberFormat自定义德国德语实例的小数模式和十进制格式符号与与JDK提供的实例相关联的十进制模式和十进制格式符号相同。 上面的代码清单显示了对一个名为acquireDecimalFormat(Locale)的方法的调用以获取JDK提供的Locale.GERMANY的DecimalFormat实例。 为了完整起见接下来显示该方法。 /*** Provides an instance of {code DecimalFormat} associated with* the provided instance of {code Locale}.** param locale Locale for which an instance of {code DecimalFormat}* is desired.* return Instance of {code DecimalFormat} corresponding to the* provided {code Locale}.* throws ClassCastException Thrown if Im unable to acquire a* {code DecimalFormat} instance from the static factory method* on class {code NumberFormat} (the approach recommended in the* class-level Javadoc for {code DecimalFormat}).*/
private static DecimalFormat acquireDecimalFormat(final Locale locale)
{final NumberFormat generalGermanyGermanFormat NumberFormat.getInstance(locale);if (generalGermanyGermanFormat instanceof DecimalFormat){return (DecimalFormat) generalGermanyGermanFormat;}throw new ClassCastException(Unable to acquire DecimalFormat in recommended manner; presented with NumberFormat type of generalGermanyGermanFormat.getClass().getSimpleName() instead.);
} 上面显示的代码段演示了当不希望在给定Locale类的实例中关联的紧凑数字模式时如何为CompactNumberFormat的给定实例定制紧凑数字模式。 如果CompactNumberFormat类上有一个方法可以覆盖与通过NumberFormat静态工厂类获得的现有实例相关联的一些或所有紧凑型数字模式 那就很好了 但是JDK 12已经进入了下降阶段2 。 翻译自: https://www.javacodegeeks.com/2019/01/number-pattern-compact-number-formatting.html