2010-11-18 2 views
4

내가 검색했는데 발견되었지만 모두 작동하지 않았습니다. 내 문제는 String에서 double으로 캐스팅하려는 동안 NumberFormatException이 발생합니다.Java에서 NumberFormatException을 피할 수있는 방법은 무엇입니까?

문자열 배열에는 많은 문자열이 포함되어 있으며 데이터를 볼 수 있도록 출력을 만들기 위해 먼저 출력을 시도했습니다. 유일한 문제는 double 값입니다. 그것은 5837848.3748980과 비슷하지만 valueOf 메서드는 항상 여기에 예외를 throw합니다. 나는 이유를 모른다.

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()); 
} 

예외 출력 : 그것은 여기 잘 작동

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

예외가 무엇에 표시 - 즉 유효한 정수하지? – darioo

+0

NumberFormatException – Andre

+0

darioo가 기본적으로 예외 로그를 ​​요청하고 있습니다. –

답변

11

. 그래서 귀하의 시스템 로케일은 .이 아닌 ,으로 소수 구분 기호로 가정합니다. 당신이 DecimalFormat 사용할 수있는 이런 일을 방지하려면 :

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

당신의 변수의 이름으로 판단 - 계정 - 당신이 돈을 취급하고 있다고 가정합니다. 돈을 나타 내기 위해 부동 소수점 유형을 사용하지 않아야합니다. BigDecimal 또는 가능하면 int

+0

나는 그것을 생각하지 않았다. 그러나 그렇다, 독일의 소수 구분자. – Andre

3

This은 문자열을 숫자로 변환하기위한 DecimalFormat 사용의 시작점입니다. 또한 화폐와 화폐를 다루는 경우 두 배가 아닌 BigDecimal을 사용해야합니다.

2
당신은 소수점이있는 숫자에있는 Integer.parseInt를 사용하는

- 당신의 스택 추적

+0

그런 문제가있었습니다. 여기에는 프로세스 간 통신이 있고 원자화 된 배열에는 프로토콜 형식의 데이터가 들어 있습니다. 올바르게 구문 분석되지 않았습니다. 하지만 이제는 작동하고 bigdecimal로 훨씬 더 잘 작동합니다! – Andre

관련 문제