Java解析指数表示法中的数字

Java解析指数表示法中的数字,java,Java,我正在尝试将字符串转换为整数,并得到一个NumberFormatException。原因很明显。但我需要一个解决办法。下面是示例代码 public class NumberFormatTest { public static void main(String[] args) { String num = "9.18E+09"; try{ long val = Long.valueOf(num); }catch(NumberFormatException ne){ //T

我正在尝试将字符串转换为整数,并得到一个
NumberFormatException
。原因很明显。但我需要一个解决办法。下面是示例代码

public class NumberFormatTest {
 public static void main(String[] args) {
  String num = "9.18E+09";
  try{
   long val = Long.valueOf(num);
  }catch(NumberFormatException ne){
   //Try to convert the value to 9180000000 here
  }
 }
}
我需要注释部分的逻辑,一个通用的就好了。谢谢。

使用
Double.valueOf()
并将结果强制转换为
long

Double.valueOf("9.18E+09").longValue()

但这增加了开销,较小的数字不需要这样做。对于可在
long
中表示的数字,请使用Joachim Sauer的解决方案。

这看起来非常干净。谢谢很好的解决方案。。非常感谢。现在无法接受答案,必须再等7分钟。:)旧帖子,但如果你想强制执行精确的长范围(无截断)并避免舍入错误,请使用
新的BigDecimal(numberString).longValueExact()
@CPerkins:我不认为这是重复的,因为这个问题似乎只是关于数值问题,而链接的问题是关于符号的每一部分。
BigDecimal bd = new BigDecimal("9.18E+09");
long val = bd.longValue();