我正在使用Java 1.7我正在使用这个遗留代码,其中使用了DecimalFormater而没有指定语言环境,甚至我尝试打印默认语言环境,显示下面的英语是附加的代码和日志但是,decimalFormatter是选择逗号而不是点。
下面是遗留代码(我无法更改它),它在2台计算机上的行为方式不同
DecimalFormat df = new DecimalFormat("#.####"); /* I18NOK:EMS */
logger.info("Decimal formatter symbols :: "+df.getDecimalFormatSymbols());
logger.info("Current locale :: "+Locale.getDefault().getLanguage()+" country :: "+Locale.getDefault().getLanguage()+" varient :: "+Locale.getDefault().getVariant()+" display language :: "+Locale.getDefault().getDisplayLanguage());
df.setRoundingMode(RoundingMode.HALF_UP);
logger.info("before formatting the number :: "+value);
Double valueOf = Double.valueOf(value);
logger.info("Value after double parse :: "+valueOf);
value = df.format(valueOf);
logger.info("after formatting the number :: "+value);
我尝试打印机器的系统属性,如下所示
机器1,与2.34,0.234
等值完美配合机器2,其中2.34,0.34之类的值转换为逗号,同时传递给使用逗号转换为值的十进制格式化程序,这会产生错误,因为它与点预期的模式不匹配。
这部署在某些非英语区域的机器上。 我试图获得的区域设置详细信息如下所示
当前locale :: en country :: en variant :: display language :: English 这与我在命令提示符下使用systeminfo的结果不同 它返回os_Locale :: no:Norwegian
为什么会有区别? 为什么十进制格式化选择逗号而不是Dot?
编辑问题: - 当我试图在机器上打印JVM选项,即JVM的系统属性时,我看到机器中传递了2个额外的参数,其中十进制点被转换为逗号,如下所示
**System properties :: user.country.format : NO
System properties :: user.language.format : no**
我试图将该特定机器的显示语言设置为挪威语,但仍然在系统重新启动后,这些参数仍然相同,即NO(挪威语区域设置)。 我需要帮助将这些参数设置回英语,因为我怀疑JVM正在根据这两个参数进行十进制格式化。