我有一个小的疯狂方法,将BigDecimal值转换为漂亮可读的字符串.
private String formatBigDecimal(BigDecimal bd){
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(3);
df.setMaximumFractionDigits(3);
df.setMinimumIntegerDigits(1);
df.setMaximumIntegerDigits(3);
df.setGroupingSize(20);
return df.format(bd);
}
Run Code Online (Sandbox Code Playgroud)
然而,它还产生了一个所谓的分组分隔符",",它使我的所有值都出现如下:
xxx,xxx
Run Code Online (Sandbox Code Playgroud)
我确实需要分隔符是点或点而不是逗号.有没有人知道如何完成这个小壮举?
我已阅读本,尤其是这个,现在死,但我无法找到一个方法来完成这件事.我是以错误的方式接近这个吗?这样做有更优雅的方式吗?甚至可能是一个解决不同本地数字表示的解决方案,因为逗号将完全符合欧洲标准.
我在Java 8(1.8.0_77)和Java 9(Java HotSpot(TM)64位服务器VM(构建9 + 181,混合模式)中尝试了一些代码)
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
DayOfWeek mo = dtf.parse("Mo", DayOfWeek::from);
System.out.println("mo = " + mo);
Run Code Online (Sandbox Code Playgroud)
我不太熟悉这些类的细节,但在Java 8中这个工作,打印:
mo =星期一
在Java 9中,它失败了
线程"main"中的异常java.time.format.DateTimeParseException:无法在java.base上的java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1988)的索引0处解析文本"Mo"在day.main(day.java:10)的/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890)
任何想法,这是可重现的吗?
因此,在格式化时:使用此代码:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
String format = dtf.format(DayOfWeek.MONDAY);
System.out.println("format = " + format);
Run Code Online (Sandbox Code Playgroud)
jdk1.8.0-77:
格式= Mo.
jdk-9(build 9 + 181)
格式= Mo.
当我通过 输出数字时,如何在JAVA 11中使用不受支持的区域设置(例如ar-US)?String.format()
在Java 8中,这工作得很好(尝试jdoodle,选择 JDK 1.8.0_66):
\nLocale locale = Locale.forLanguageTag("ar-US");\nSystem.out.println(String.format(locale, "Output: %d", 120));\n// Output: 120\nRun Code Online (Sandbox Code Playgroud)\n从Java 11开始,输出采用东方阿拉伯数字(尝试jdoodle,使用默认的 JDK 11.0.4):
\nLocale locale = Locale.forLanguageTag("ar-US");\nSystem.out.println(String.format(locale, "Output: %d", 120));\n// Output: \xd9\xa1\xd9\xa2\xd9\xa0\nRun Code Online (Sandbox Code Playgroud)\n看来,这个问题来自于区域设置数据提供程序从JRE到CLDR的切换(来源:@mcarth 的 Java 9 中的本地化更改)。以下是支持的区域设置列表:JDK 11 支持的区域设置
\n更新
\n我将问题示例更新为ar-US,因为我之前的示例没有意义。我们的想法是建立一种在特定国家/地区有意义的格式。在示例中,它将是美国 ( US)。