Java以指数表示法解析数字

bra*_*boy 28 java

我正在尝试将String转换为整数,我得到了一个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
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

我需要评论部分中的逻辑,通用的一个会很好.谢谢.

Joa*_*uer 80

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

Double.valueOf("9.18E+09").longValue()
Run Code Online (Sandbox Code Playgroud)

  • 旧帖子,但如果你想强制执行精确的远程(没有截断)并避免舍入错误,请使用`new BigDecimal(numberString).longValueExact()` (6认同)
  • 请注意,这可能会导致舍入错误. (2认同)

Boz*_*zho 13

BigDecimal bd = new BigDecimal("9.18E+09");
long val = bd.longValue();
Run Code Online (Sandbox Code Playgroud)

但这增加了开销,而小数字则不需要.对于可表示的数字long,请使用Joachim Sauer的解决方案.