2010-11-18 19 views
4

arandım, buldum, ama hepsi işe yaramadı. NumberFormatException benim Stringdouble için atmak istediğiniz sırada atılır benim sorunum.Java'da bir NumberFormatException'ı nasıl önleyebilirim?

Atom dizilimi dizisi birçok dizeyi içerir ve daha önce bunları görünür hale getirmek için bir çıkış yapmaya çalıştım, böylece veri olduğundan emin olabilirdim. Tek sorun, çift değer. 5837848.3748980 gibi bir şeydir, ancak valueOf yöntemi her zaman buradaki istisnayı atar. Neden olduğuna dair hiçbir fikrim yok.

try 
{ 
int key = Integer.valueOf(atomized[0]); 

double value = Double.valueOf(atomized[1].trim()); 

int role = Integer.valueOf(atomized[2]); 

Double newAccountState = this.bankKonto.charge(key, value, role); 
System.out.println("NEW Account State "+newAccountState); 
this.answerClient(newAccountState.toString()); 
} 
catch (NumberFormatException e) 
{ 
System.out.println(e.getClass().toString()+" "+e.getMessage()); 
} 

İstisna çıkışı: Burada gayet iyi çalışıyor

java.lang.NumberFormatException: For input string: "109037.0" 
     at java.lang.NumberFormatException.forInputString(Unknown Source) 
     at java.lang.Integer.parseInt(Unknown Source) 
     at java.lang.Integer.valueOf(Unknown Source) 
     at vsys.ue02.server.Bank.computeData(Bank.java:122) 
     at vsys.ue02.server.Bank.run(Bank.java:160) 
+0

istisna nedir görünür - bu geçerli bir tamsayı değil? – darioo

+0

NumberFormatException – Andre

+0

darioo temel olarak özel durum günlüğünü istiyor. –

cevap

11

. Bu nedenle, sistem yerel ayarınızın ondalık ayırıcı için . yerine , olduğunu varsayalım. Eğer DecimalFormat kullanabilirsiniz Bunları önlemek için:

new DecimalFormat().parse("5837848.3748980"); 

senin değişkenin adı bakılırsa - Hesap - Sana para ile ilgileniyor varsayalım. Parayı temsil etmek için hiçbir zaman kayan nokta türlerini kullanmamalısınız. BigDecimal veya int

+0

Bunu düşünmedim ama evet, ondalık ayırıcı. – Andre

3

This, dizeleri sayılara dönüştürmek için DecimalFormat'ı kullanmak için bir başlangıç ​​noktasıdır. Ayrıca, para ve para ile uğraşıyorsanız, çift yerine BigDecimal kullanmayı düşünmelisiniz.

2
Bir ondalık noktası ile bir dizi Integer.parseInt kullanırken

- senin yığın izlemesi

+0

problem, bunun gibi bir şeydi. Burada süreç içi iletişim var ve atomize dizi bir protokol formunda incomming veri içerir. doğru ayrıştırılmadı. ama şimdi çalışıyor ve bigdecimal ile çok daha iyi çalışıyor! – Andre

İlgili konular