2010-04-27 10 views
24

Sto tentando di eseguire una conversione di una stringa in numero intero per la quale ottengo uno NumberFormatException. La ragione è abbastanza ovvia. Ma ho bisogno di una soluzione qui. Di seguito è riportato il codice di esempio.Java analizza un numero in notazione esponenziale

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

Ho bisogno della logica che va nella sezione commenti, uno generico sarebbe bello. Grazie.

+0

Possibile duplicato: http://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly – CPerkins

+0

@CPerkins: Non penso che sia un duplicato in quanto questa domanda sembra riguardare solo la domanda numerica, mentre quello collegato riguarda ciascuna parte della notazione. –

+0

@Joachim: abbastanza giusto. – CPerkins

risposta

69

Usa Double.valueOf() e gettò il risultato long:

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

+1, per i numeri che si adattano a 'long' questa è la strada da percorrere. – Bozho

+0

Bella soluzione .. Grazie. Non posso accettare la risposta ora, devo aspettare altri 7 minuti. :) – bragboy

+2

Si noti che questo ha il potenziale di errori di arrotondamento. – DJClayworth

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

Ma questo aggiunge in testa, che non è necessario con i numeri più piccoli. Per i numeri rappresentabili in long, utilizzare la soluzione di Joachim Sauer.

+0

Sembra molto pulito. Grazie! – bragboy

Problemi correlati