【问题标题】:Convert exponential string value to double - Java将指数字符串值转换为双精度 - Java
【发布时间】:2015-03-20 12:44:23
【问题描述】:

我有一个指数字符串值

String str = "2.00000181334612E15";

我正在尝试将其转换为双精度值。

Double d = (Double.parseDouble(str));

但是我得到一个异常如下,

Exception in thread "main" java.lang.NullPointerException
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1047)
    at java.lang.Double.parseDouble(Double.java:521)
    at com.swissre.lhrte.poi.test.TestClient.main(Test.java:133)

我做错了什么?

【问题讨论】:

  • 如果第 1047 行是Double d = ... 行,那么当str 在那里使用时不知何故为NULL。你用调试器检查了吗?
  • 确实如此。如果str 为空,这就是我得到的堆栈跟踪,但是当str 实际上“2.00000181334612E15”时它工作正常。 (这就是为什么总是值得提供一个简短但完整的程序来演示问题......)
  • 仅供参考,您也不需要括号。你可以这样做:Double d = Double.parseDouble(str);
  • Nope line number 133 is Double d = . . .
  • 对不起,我的意思是第 521 行......但无论如何,正如@JonSkeet 提到的,如果没有MCVE,很难弄清楚这一点

标签: java type-conversion double exponential


【解决方案1】:

您的代码没有问题。要看到这一点,请考虑以下代码段:

public class exp {
  public static void main(String[] args) {
    String str = "2.00000181334612E15";
    Double d = (Double.parseDouble(str));
    System.out.println(d);
  }
};

如果您从 Double.parseDouble 获得 NullPointerException 则意味着您给了它一个空参数。您答案中的代码行没有给它一个空参数。所以我猜在你的完整代码中你必须在你没有意识到的情况下给 Double.parseDouble 一个空参数。

根据 Double.parseDouble() 文档,它调用 Double.valueOf() 并且 Double.valueOf() 的文档指定您可以给它指数值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多