Java decimal formatter locale问题

时间:2017-11-13 20:01:08

标签: jvm locale java-7 jvm-arguments decimalformat

我正在使用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

等值完美配合
  1. 系统属性:: java.version:1.7.0_76
  2. 系统属性:: user.timezone:Europe / Paris
  3. 系统属性:: java.vm.info:mixed mod
  4. java.runtime.version:1.7.0_76-b13
  5. 系统属性:: os.name:Windows Server 2012 R2
  6. 系统属性:: user.language:en
  7. Decimal seperator ::。
  8. 机器2,其中2.34,0.34之类的值转换为逗号,同时传递给使用逗号转换为值的十进制格式化程序,这会产生错误,因为它与点预期的模式不匹配。

    1. 系统属性:: java.version:1.7.0_76
    2. 系统属性:: user.language:en
    3. 系统属性:: user.country:US
    4. 系统属性:: java.vm.version:24.76-b04
    5. 系统属性:: os.name:Windows Server 2012 R2
    6. 小数分隔符::,
    7. 这部署在某些非英语区域的机器上。 我试图获得的区域设置详细信息如下所示

      当前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正在根据这两个参数进行十进制格式化。

0 个答案:

没有答案