java - 将指数数字格式的字符串转换为 double 会导致 NumberFormatException

标签 java parsing double

任务:

我正在从数据库获取技术数据,需要对其进行处理,以便将其放入需要双值的数据库中。数据库中的实体是电梯,具有“行驶高度、重量、..:”等技术数据。

源数据库给了我 strings采用指数数格式,即: 2.8300000000000000E+04 .

然后我将这个字符串转换为 Double像这样:

public Double getDoubleNumberFromJSONString(String inputValue) {
        return Double.valueOf(inputValue);
}

输出:28.300 (现在是双)

问题:

大多数时候我的方法都有效,但有时源数据库不会提供指数数字,但类似这样的事情:

2,200.0 mm ...所以一个非指数数和一个单位。这导致 NumberFormatException

我不知道如何解决这个问题,因为源输入实际上可能有很大差异:

1.000 kg ... kg 1.000 ... mm 2,000 ... 350 ... 350.0 ... 350,0 ...

由于我们的数据库需要双格式号码,因此简单地转发源号码是行不通的。

我的解决方案:

我尝试使用instanceof检查该字符串是否实际上可能是 Double :

public Object getDoubleNumberFromJSONString(String inputValue) {
    // FIXME Throws an error
    if(Double.valueOf(inputValue) instanceof Double){
        return Double.valueOf(inputValue);
    }
    else{
        System.out.println("Had to return inputValue in DoubleNumber()! Crash?");
        return inputValue;
    }
}

但是Double.valueOf(inputValue)已经抛出了 NumberFormatException ,所以我不知道如何处理这种情况。

问题:

如何将输入正确解析为 Double

最佳答案

感谢Julien Lopez' proposal in the comments我能够让它按预期工作!

这是我构建的解决方案:

public Double getDoubleNumberFromJSONString(String inputValue) {
    try {
        return Double.valueOf(inputValue);
    } catch (NumberFormatException e) {
        Scanner sc = new Scanner(inputValue);
        double value1 = sc.nextDouble();

        sc.close();
        return value1;
    }
}

首先,该方法尝试将输入字符串从指数格式转换为 double 。

如果失败,则会抛出NumberFormatException

然后我使用扫描仪来扫描字符串中的双值并返回它。

我已接受我的问题作为 Julien Lopez 提案的副本,因为那里的解决方案非常适用于我的问题。我回答了我自己的问题作为一个工作示例。

关于java - 将指数数字格式的字符串转换为 double 会导致 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40787050/

相关文章:

java - 在 intellij 中设置 spring mvc 项目时,如何设置 tomcat/jetty?

java - 如何测试服务器端是否出现错误,并输出客户端

java - 如何使用RCP在eclipse插件开发中获取被点击的对象

java - 如何将 XML 文档导出到文件系统

ios - 来自照片 UITableView 的 json 不显示

parsing - 规范语法中的结构差异

c - 从二进制文件中读取 double (字节顺序?)

Java幂函数答案

php - 向mysql中插入double number,更改(.)

javascript - 在 JavaScript 中操作数据时是否应该避免使用 C# 中的十进制类型