相关疑难解决方法(0)

如何将DecimalFormat的小数分隔符从逗号更改为点/点?

我有一个小的疯狂方法,将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 android decimal-point bigdecimal decimalformat

192
推荐指数
5
解决办法
24万
查看次数

JDK dateformater在德语语言环境中解析DayOfWeek,java8 vs java9

我在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 java-8 java-time java-9

16
推荐指数
2
解决办法
639
查看次数

如何在 Java 11 中使用不支持的区域设置以及 String.format() 中的数字

当我通过 输出数字时,如何在JAVA 11中使用不受支持的区域设置(例如ar-US)?String.format()

\n

Java 8中,这工作得很好(尝试jdoodle选择 JDK 1.8.0_66):

\n
Locale locale = Locale.forLanguageTag("ar-US");\nSystem.out.println(String.format(locale, "Output: %d", 120));\n// Output: 120\n
Run Code Online (Sandbox Code Playgroud)\n

Java 11开始,输出采用东方阿拉伯数字(尝试jdoodle使用默认的 JDK 11.0.4):

\n
Locale locale = Locale.forLanguageTag("ar-US");\nSystem.out.println(String.format(locale, "Output: %d", 120));\n// Output: \xd9\xa1\xd9\xa2\xd9\xa0\n
Run Code Online (Sandbox Code Playgroud)\n

看来,这个问题来自于区域设置数据提供程序从JRECLDR的切换(来源:@mcarth 的 Java 9 中的本地化更改)。以下是支持的区域设置列表:JDK 11 支持的区域设置

\n

更新

\n

我将问题示例更新为ar-US,因为我之前的示例没有意义。我们的想法是建立一种在特定国家/地区有意义的格式。在示例中,它将是美国 ( US)。

\n

java locale number-formatting cldr java-11

4
推荐指数
1
解决办法
4191
查看次数