2015-01-05 6 views
3

을받지 않고 BigDecimal의에 문자열을 구문 분석하는 방법 :나는이 오류가 BigDecimal의에 문자열 배열에서 값을 구문 분석 할 때 오류

Exception in thread "main" java.text.ParseException: Unparseable number: "86400864008640086400222" 

내가이 문제를 해결하는 방법을 해결책을 인터넷에서 검색하고 있습니다. 너희들이 아는가?

BigDecimal을 사용하는 것은 제 생각이 아니지만 불행히도해야합니다.

public void Function() throws ParseException { 
    String [] array; 
    array=OpenFile().split("\\s"); 
    for(int i = 10 ;i < array.length; i+= 11) { 
     BigDecimal EAE = parseCurrencyPrecise(array[i]); 
     System.out.println(EAE); 
    } 
} 

OpenFile 기능은 데이터 파일을 열고이 읽기 : 시도가 구문 분석 할 때 다음

public static BigDecimal parseCurrencyPrecise (String value) throws ParseException 
{ 
    NumberFormat format = NumberFormat.getCurrencyInstance(); 
    if (format instanceof DecimalFormat) 
     ((DecimalFormat) format).setParseBigDecimal (true); 

    Number result = format.parse (value); 
    if (result instanceof BigDecimal) 
     return (BigDecimal) result; 
    else { 
     // Oh well... 
     return new BigDecimal (result.doubleValue()); 
    } 
} 

내 코드입니다 : 나는 그것을 BigDecimal를로 문자열에서 값을 변경하고 반환하기로 몇 가지 코드를 설립 이런 식으로 temp + = line + ""; 이것이 내가 \ s로 나눈 이유입니다. Strings와 Integers를 가진이 작품이긴하지만 BigDecimal에 문제가있다.

인사말, 대신 당신은 BigDecimal(String val) 생성자의 사용을 만들 수있는 자신을 구문 분석을 다루는

+0

정말 큰 숫자 앞에 로캘에 대한 통화 기호가 있습니까? 이 오류를 통화 기호로 복제 할 수 있지만 달러 기호 (내 로케일의 통화)를 사용할 때 작동합니다. – rgettman

+0

이 지역 로그인은 어떻게됩니까? 나는 오늘 BigDecimal을 사용하기 시작했고, 지역 신호에 관한 기사를 들었다. – Agnes

+0

'new BigDecimal (result.doubleValue()) 대신'BigDecimal.valueOf (result.doubleValue())'를 사용하십시오. – Tom

답변

3

. 예를 들어, Javadoc

BigDecimal(String val) 
Translates the string representation of a BigDecimal into a BigDecimal 

에서 :

BigDecimal bigDecimal = new BigDecimal("86400864008640086400222"); 

생성자가 걸리는 형식의 자바 독을 참조하십시오.

+0

마이크 코빗 (Mike Kobit)과 마크버 나드 (Markbernard)도 괜찮습니다. 도움 주셔서 감사합니다. – Agnes

2

생성자를 사용할 수없는 이유가 있습니까? 그것이 당신보다 더 복잡하게 보이고있는 것처럼 보입니다. 이 나를 위해 일했다 :

System.out.println(new BigDecimal("86400864008640086400222"));