2010-04-27 33 views
24

que estoy tratando de hacer una conversión de una cadena a un entero para el que consigo un NumberFormatException. La razón es bastante obvia. Pero necesito una solución aquí. A continuación está el código de muestra.Java analizar un número en notación exponencial

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 
    } 
} 
} 

Necesito la lógica que va en la sección de comentarios, una genérica sería agradable. Gracias.

+0

Posible duplicado: http://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly – CPerkins

+0

@CPerkins: No creo que sea un duplicado ya que esta pregunta parece ser solo sobre la pregunta numérica, mientras que el vinculado es sobre cada parte de la notación. –

+0

@Joachim: suficiente. – CPerkins

Respuesta

69

Uso Double.valueOf() y arrojado el resultado de long:

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

+1, para los números que caben en 'long' ese es el camino a seguir. – Bozho

+0

Buena solución ... Gracias. Ahora no puedo aceptar la respuesta, tengo que esperar 7 minutos más. :) – bragboy

+2

Tenga en cuenta que esto tiene el potencial de errores de redondeo. – DJClayworth

11
BigDecimal bd = new BigDecimal("9.18E+09"); 
long val = bd.longValue(); 

Pero esto implica una sobrecarga, lo que no se necesita con números más pequeños. Para los números que son representables en long, utilizar la solución de Joachim Sauer.

+0

Esto se ve muy limpio. ¡Gracias! – bragboy

Cuestiones relacionadas