【问题标题】:Can't convert numbers from file to double format无法将数字从文件转换为双格式
【发布时间】:2016-03-06 18:19:37
【问题描述】:

我需要将文件 (*.txt) 中的数字(用空格分隔)转换为双精度格式。

文件包含双格式数字行,例如“3.50 3.51 -3.49 -3.50 -3.51”。但是这段代码抛出 ParseException "Unparseable number: "3.50" " 我不明白为什么会这样?我尝试对 Double.parseDouble 和 .valueOf 做同样的事情,但它总是抛出异常。

我对异常的原因感兴趣,而不是解决此任务的其他方法。谁能给我解释一下?

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    Scanner fileI = new Scanner(new File(reader.readLine()));
    NumberFormat nf = NumberFormat.getInstance();

    while(fileI.hasNextLine())
    {
        String[] str = fileI.nextLine().split(" ");
        for (String it: str)
        {
            System.out.println(nf.parse(it).doubleValue());
        }
    }
    fileI.close();

【问题讨论】:

  • 我没有收到您描述的错误。你的代码对我来说很好用。
  • 这很可能是由于您的语言环境 - 某些国家/地区需要逗号作为小数分隔符。尝试需要Locale 参数的getInstance 版本。您可以提供类似Locale.US 的内容。

标签: java string file double


【解决方案1】:

尝试使用Double.parseDouble(String s)

如果不是你想要的,尝试做类似的事情

for (String it: str)
{
    try{
        System.out.println(nf.parse(it).doubleValue());
    }catch (ParseException e){
        System.out.println("unappeasable number - "+it);
    }
}

【讨论】:

  • 谢谢你,你的回答真的很有帮助!
  • @Al-Phantom 但这并不是您问题的真正答案,是吗?请记住,您说过您“对解决此任务的其他方式不感兴趣”。如果你不坚持自己的立场,我真的很难用类似的答案标记另一个用户......
  • @JoD。是的,我仍然不明白为什么它会引发异常(我发现使用 try-catch 它只发生在数组的第一个字符串中)。使用 Locale 参数没有帮助,使用逗号也是如此。我想我应该彻底阅读文档。
  • @JoD。我找到了异常的原因。这是因为文件而发生的。我试图对 FileInputStream 做同样的事情,发现文件开头有额外的字节。记事本放上来表示文件是用UTF-8编码保存的。
猜你喜欢
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多