【问题标题】:NumberFormatException on Double.valueOf with comma decimal separator带有逗号小数分隔符的 Double.valueOf 上的 NumberFormatException
【发布时间】:2015-04-14 03:17:52
【问题描述】:

带逗号小数分隔符的 Double.valueOf 引发 NumberFormatException。 Java 1.7.0_67 和 1.8.0_25。

我还尝试将 DecimalFormatSymbols 设置为 "," 作为小数分隔符。

Locale.setDefault(Locale.FRANCE);
assert "12,3".equals(NumberFormat.getInstance().format(12.3));
if (((DecimalFormat) NumberFormat.getInstance()).getDecimalFormatSymbols().getDecimalSeparator() == ',')
    Double.valueOf("12,3");

【问题讨论】:

    标签: java numberformatexception


    【解决方案1】:
    NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
    Number number = format.parse("12,3");
    Double d = number.doubleValue();
    System.out.println(d);
    

    【讨论】:

      【解决方案2】:

      Double.valueOf() 不支持区域设置。它只理解带点的数字作为小数位。

      幸运的是,您可以使用相同的 NumberFormat 实例来格式化区域设置感知的解析......

      NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
      
      System.out.println(format.format(12.3));   // ==> "12,3"
      System.out.println(format.parse("12,3"));  // ==> 12.3
      

      【讨论】:

        【解决方案3】:

        Double.valueOf(String) 不考虑默认语言环境。请注意,该方法的 API 文档准确地解释了它所期望的格式。它还告诉你:

        要解释浮点值的本地化字符串表示,请使用 NumberFormat 的子类。

        例如,使用DecimalFormat 来解析字符串。

        DecimalFormat format = new DecimalFormat("##.#");
        Double value = (Double) format.parse("12,3");
        

        【讨论】:

          猜你喜欢
          • 2013-04-13
          • 2013-02-20
          • 2014-01-04
          • 2019-01-22
          • 2016-07-09
          • 2020-12-03
          • 1970-01-01
          相关资源
          最近更新 更多