【问题标题】:How to specify decimal delimiter如何指定小数分隔符
【发布时间】:2012-01-31 23:14:26
【问题描述】:

我有一个相当简单的问题。我得到像6.03 这样的实数输入,但这给了我错误。如果我将其更改为6,03,就可以了。但是,我无法更改需要处理的输入,那么如何告诉 Java 使用 . 作为分隔符而不是 ,

Scanner sc = new Scanner(System.in);
double gX = sc.nextDouble(); // Getting errors

谢谢

【问题讨论】:

  • 请出示您的代码。执行此转换的方法有多种,我们不知道您使用的是什么。
  • 已添加代码。不认为这很重要,但这里是

标签: java double delimiter


【解决方案1】:

Scanner可以提供Locale使用,需要指定Locale使用.作为小数分隔符:

Scanner sc = new Scanner(System.in).useLocale(Locale.ENGLISH); 

【讨论】:

    【解决方案2】:

    您可能遇到了语言环境问题。可以使用java.text.NumberFormat进行解析。

    NumberFormat format = NumberFormat.getInstance(Locale.US);
    Number number = format.parse("6.03");
    double d = number.doubleValue();
    

    【讨论】:

      【解决方案3】:

      Taken directly from the manual.

      区域敏感格式

      前面的示例为默认语言环境创建了一个 DecimalFormat 对象。如果您想要非默认语言环境的 DecimalFormat 对象,则实例化 NumberFormat,然后将其转换为 DecimalFormat。这是一个例子:

      NumberFormat nf = NumberFormat.getNumberInstance(loc);
      DecimalFormat df = (DecimalFormat)nf;
      df.applyPattern(pattern);
      String output = df.format(value);
      System.out.println(pattern + " " + output + " " + 
                         loc.toString());
      

      运行前面的代码示例会产生以下输出。第二列中的格式化数字因区域设置而异:

      ###,###.###      123,456.789     en_US
      ###,###.###      123.456,789     de_DE
      ###,###.###      123 456,789     fr_FR
      

      【讨论】:

      • 似乎有很多代码只是为了做到这一点,考虑到在 Delphi 中只需执行 DecimalSeparator := '|'; 即可完成。不过谢谢
      • @Magicmaster:那大概是一个全局变化,影响全局状态?不是一个好主意...
      猜你喜欢
      • 2015-11-15
      • 2018-11-09
      • 2021-02-25
      • 2017-02-07
      • 2012-04-06
      • 2018-06-27
      • 2013-02-24
      • 1970-01-01
      相关资源
      最近更新 更多