Java Locale.getDefault()不返回区域设置小数分隔符

Java Locale.getDefault()不返回区域设置小数分隔符,java,locale,Java,Locale,我正在尝试根据区域设置上配置的十进制分隔符,使用正确的十进制分隔符将值导出到excel工作表。 我尝试使用: private static Locale tp = Locale.getDefault(); DecimalFormatSymbols dfs = new DecimalFormatSymbols(tp); String sep = Character.toString(dfs.getDecimalSeparator()); 但是dfs.getDecimalSeparator()始终

我正在尝试根据区域设置上配置的十进制分隔符,使用正确的十进制分隔符将值导出到excel工作表。 我尝试使用:

private static Locale tp = Locale.getDefault();
DecimalFormatSymbols dfs = new DecimalFormatSymbols(tp);
String sep = Character.toString(dfs.getDecimalSeparator());
但是dfs.getDecimalSeparator()始终返回“逗号”,即使我将区域设置从“逗号”更改为“点”

据我所知,Locale.getDefault()返回Java虚拟机(JVM)首次加载时最初确定的区域设置。也就是说,JVM根据主机环境确定默认语言环境。主机环境的区域设置由主机操作系统和在该系统上建立的用户首选项决定

但假设我不想获取区域设置的十进制分隔符,但我想获取区域设置中配置的内容,即使它不是区域设置,我该怎么做

C:\Users\admim>java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

“即使我改变了地区设置”你在哪里做出改变?请注意,Java具有将区域设置映射为十进制格式符号的内部文件。这些符号不是从操作系统的“当前”设置中读取的。您认为区域设置有什么影响?您好,我正在更改“控制面板->区域和语言”上的小数分隔符,而不是单击其他设置。这就是我所说的区域设置。Andreas,我如何读取操作系统的当前设置?我以“”的副本关闭,尽管这是关于日期格式的,而你的问题是关于数字格式的,但实际上是同一个问题。简而言之:Java不支持它。您必须亲自阅读Windows注册表才能获得“区域和语言”值,然后正确解释它们。“即使我更改了区域设置”,您在哪里进行更改?请注意,Java具有将区域设置映射为十进制格式符号的内部文件。这些符号不是从操作系统的“当前”设置中读取的。您认为区域设置有什么影响?您好,我正在更改“控制面板->区域和语言”上的小数分隔符,而不是单击其他设置。这就是我所说的区域设置。Andreas,我如何读取操作系统的当前设置?我以“”的副本关闭,尽管这是关于日期格式的,而你的问题是关于数字格式的,但实际上是同一个问题。简而言之:Java不支持它。您必须自己阅读Windows注册表才能获得“区域和语言”值,然后正确解释它们。