Java解析指数格式的数字

Java解析指数格式的数字,java,parsing,Java,Parsing,我很难转换字符串 -8.70395364652618e-02 或者从字符串到双精度的类似数量。任何帮助都将不胜感激 我可能会草率地问,但这看起来是个好办法吗 double val = new BigDecimal(string).doubleValue(); 您可以使用Double.valueOf()。此方法将解析字符串中类似的内容。有关更多信息,请参阅ofDouble.valueOf 正如herrlock在他的评论中正确地提到的,您也可以使用Double.parseDouble(),但我会

我很难转换字符串

-8.70395364652618e-02
或者从
字符串
双精度
的类似数量。任何帮助都将不胜感激

我可能会草率地问,但这看起来是个好办法吗

double val = new BigDecimal(string).doubleValue();

您可以使用
Double.valueOf()
。此方法将解析字符串中类似的内容。有关更多信息,请参阅of
Double.valueOf

正如herrlock在他的评论中正确地提到的,您也可以使用
Double.parseDouble()
,但我会使用第一种方法,原因是
parseDouble()

返回一个新的double,初始化为指定字符串表示的值,由类double的valueOf方法执行


首先,
double
不是无限精确的。您拥有的数字将由最接近的
double
值表示-您的数字可表示为
double

public static void main(String[] args) throws Exception {
    BigDecimal val = new BigDecimal("-8.70395364652618e-02");
    System.out.println(val);
    System.out.println(val.doubleValue());
}
输出:

-0.0870395364652618
-0.0870395364652618
因此,标准解析方法将起作用:

String val = "-8.70395364652618e-02";
System.out.println(Double.valueOf(val));
System.out.println(String.valueOf(Double.parseDouble(val)));

区别在于
Double.valueOf
将返回
Double
(对象包装器),而
Double.parseDouble
将返回
Double
(原语类型).

@Boristespider我不知道你为什么需要代码question@msrd0部分是为了表明OP已经做出了一些努力,部分是为了理解我们所回答的确切问题。i、 e.是“为什么我的数字变为双精度”还是“如何将
字符串
解析为双精度”@BenQuinton善意地投票并接受对你最有帮助的答案@shekharsuman这有点言之过早。@Boristeider-我认为你的回答应该是对OP和msrd0的解释!而且,我也不会推销我的答案。最后,我想没有比这更好的了!!!请注意,JVM并不真正关心如果将
double
double
强制转换为两者中的一个,那么它们之间的唯一区别是
double
可以是
null
,在这种情况下,
double
不能t@msrd0JVM很在意——分配一个
Double
包装器将花费时间和内存;这在数学规划中可能有影响。此外,
Double
有一些非常有用的方法-
Double
(显然)没有。@msrd0您的评论完全荒谬,请进一步研究原语和引用数据类型!当然,但是从我在回答中提到的JavaDoc来看,调用
Double.valueOf
Double.parseDouble
之间没有区别-无论
Double
在何处自动转换为
Double
,都没有关系,
Double
对象将被分配到两个ways@msrd0-虽然这个问题可能与双倍vs
double
无关,但是,作为一般情况,您应该始终使用正确的标准事实,而不是特殊情况!