2010-04-27 14 views
24

Bir String'in NumberFormatException aldığım tamsayıya dönüştürmeye çalışıyorum. Sebebi oldukça açık. Ama burada bir çözüm lazım. Örnek kod aşağıdadır.Java üstel gösterimdeki bir sayı ayrıştırılıyor

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

Yorum bölümüne giden mantığa ihtiyacım var, genel bir kişi hoş olurdu. Teşekkürler.

+0

Olası kopya: http://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly – CPerkins

+0

@CPerkins: Bu sorunun sadece sayısal soruyla ilgili olduğu anlaşılıyor. bağlantılı olan, notasyonun her kısmı ile ilgilidir. –

+0

@Joachim: Yeterince adil. – CPerkins

cevap

69

Kullanım Double.valueOf() ve long sonucu döküm:

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

+1, 'long''a uyan numaralar için yoldur. – Bozho

+0

Güzel çözüm .. Teşekkür ederim. Şimdi cevabı kabul edemem, 7 dakika daha beklemek zorundayım. :) – bragboy

+2

Bunun, yuvarlama hataları için potansiyel olduğuna dikkat edin. – DJClayworth

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

Ama bu küçük sayılarla gerekli değildir ki, havai ekler. long'da görülebilen numaralar için Joachim Sauer'in çözümünü kullanın.

+0

Bu çok temiz görünüyor. Teşekkürler! – bragboy