【问题标题】:Parsing double with comma as decimal separator用逗号作为小数分隔符解析双精度
【发布时间】:2014-03-17 10:13:27
【问题描述】:

我从用户那里获取输入并逐行读取。然后我使用拆分方法对输入进行标记。像这样:

Scanner input=new Scanner(System.in);
String input1=input.nextLine();
String[] tokens=input1.split(" ");
method1(Double.parseDouble(tokens[0]),Double.parseDouble(tokens[1])); 

这里是method1:

 public static void method1 (double a, double b) {
    System.out.println(a);
    System.out.println(b);
 }

当我声明 3.5 和 5.3 输出时;

   3.5
   5.3

这里没有问题,但如果我声明 3,5 和 5,3 我的代码在下面给出错误;

Exception in thread "main" java.lang.NumberFormatException: For input string: "3,5"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)

我该如何解决这个问题?

【问题讨论】:

  • 当您尝试将 42,42 解析为 double 时,您认为会发生什么?
  • 3,5 怎么是双倍?显然它会抛出NumberFormatException。
  • 致投反对票的人:42,7,在某些文化中,逗号是被广泛接受的数字。

标签: java number-formatting


【解决方案1】:

使用NumberFormat,您可以执行以下操作:

NumberFormat f = NumberFormat.getInstance(Locale.FRANCE);
double myNumber = f.parse("3,5").doubleValue();

现在您可以将myNumber 传递给接受double 值的方法。

当使用Locale.FRANCE 时,您告诉Java 您使用, 而不是. 编写double 数字。

【讨论】:

  • 现在 OP 需要发布另一个问题,因为它不能解析 3.5 :)
  • 您应该建议将, 替换为. :)
  • 我也不能使用期望
  • @Abraam 避免异常表明不愿意使用 Java 标准实践。如果您不希望传播异常,请捕获并处理它。
  • @hexafraction 这不是我愿意或不愿意。我说我不能用!三思而后行
【解决方案2】:

你可以像这样使用DecimalFormat:

DecimanFormat df = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance());
Double returnValue = Double.valueOf(df.format(input1));

所以DecimalFormatSymbols.getInstance() 将获得默认语言环境及其正确符号。

阅读更多关于DecimalFormat的信息。

【讨论】:

    【解决方案3】:

    我猜是: 您通过扫描仪输入的是

    3.5 5.3
    

    你已经申请了

    String[] tokens=input1.split(" ");
    

    所以它已将您的字符串划分为子字符串,即 3.5 和 5.3 如果您将输入作为

    3.5,5.3 
    

    这将是成功的,它会编译没有错误..

    你的情况

    input 3,5 5,3
    

    您只需要在拆分方法中添加一个“,”,例如:

    String[] tokens=input1.split(",");
    

    它将与输出一起工作......

    3

    5 5

    3

    【讨论】:

      猜你喜欢
      • 2012-12-24
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多