2010-04-27 16 views
24

Próbuję wykonać konwersję ciągu na liczbę całkowitą, dla którego otrzymuję NumberFormatException. Powód jest dość oczywisty. Ale potrzebuję obejścia tutaj. Poniżej znajduje się przykładowy kod.Java analizować liczbę w notacji wykładniczej

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

muszę logikę, że idzie w sekcji komentarzy, rodzajowy jeden byłby miły. Dzięki.

+0

Możliwy duplikat: http://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly – CPerkins

+0

@CPerkins: Nie sądzę, że jest to duplikat, jak kwestia ta wydaje się być tylko o pytaniu numerycznym, natomiast połączony dotyczy każdej części zapisu. –

+0

@ Joachim: Wystarczająco fair. – CPerkins

Odpowiedz

69

Zastosowanie Double.valueOf() i oddanych wynik long:

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

+1, dla liczb, które pasują do 'long', to jest droga. – Bozho

+0

Ładne rozwiązanie .. Dziękuję. Nie mogę teraz przyjąć odpowiedzi, muszę poczekać jeszcze 7 minut. :) – bragboy

+2

Należy pamiętać, że może to powodować błędy zaokrąglania. – DJClayworth

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

Ale to dodaje narzut, który nie jest konieczna w mniejszych ilościach. Dla liczb, które są reprezentowalne w long, użyj rozwiązania Joachima Sauera.

+0

To wygląda bardzo czysto. Dzięki! – bragboy

Powiązane problemy