2014-12-11 1 views
0

내가 문자열로 정의 된 변수가를 사용하여,문자열은 두 배로 및 때는 isNaN

String totalweight; 

이 값 '0.00', '0.12'... 어떤 deciamls 걸릴 수 있으며 'N/A'가끔있을 것이다 .

숫자가 아닌 경우 'n/a'와 같이 입력하면 다음과 같이 형식이 지정됩니다.

public String getFmtWeight() 
    { 
      NumberFormat nf = NumberFormat.getNumberInstance(); 
      DecimalFormat df = (DecimalFormat)nf; 
      df.applyPattern("#0.00"); 
      if(Double.isNaN(Double.parseDouble(totalweight)))  
       return totalweight; 
      else 
       return df.format(Double.parseDouble(totalweight)); 

//  if(!totalweight.equals("n/a")) 
//   return df.format(Double.parseDouble(totalweight)); 
//  else 
//   return "n/a"; 

    } 

n/a가 double throws 예외로 변환 될 때 깨지기 쉽습니다. 그러나 논평 한 부분은 작동 할 것입니다. 하지만 'n/a'가 다른 문자열로 변경 될 수 있으므로 사용하고 싶지 않습니다. 같은 것을 달성하기위한 다른 방법이 있습니까?

답변

0

한 가지 해결책은 두 번 실패로 이것은 더블 parseDouble을 사용으로 구문 분석 할 수없는 임의의 문자열을 처리 할

public String getFmtWeight() 
    { 
      NumberFormat nf = NumberFormat.getNumberInstance(); 
      DecimalFormat df = (DecimalFormat)nf; 
      df.applyPattern("#0.00"); 

      try { 
       if(Double.isNaN(Double.parseDouble(totalweight)))  
        return totalweight; 
       else 
        return df.format(Double.parseDouble(totalweight)); 

      } catch (NumberFormatException ex) { 
       /* thrown when the String can't be parsed as a double */ 
       return totalweight; // if 'totalweight' is the String you want to parse 
      } 
    } 

: 문자열을 구문 분석 할 때 설명하기 위해 예컨대을 try-catch을 사용하는 것입니다.

+0

은'리턴 df'와 시도 할 수는 정확하지 않습니다; 'df'는 올바른 타입이 아닙니다. –

+1

부품이 필요하지 않고 다른 부품 만이 트릭을 수행하는 경우에도 –

+1

@DavidConrad true로 잡아 두십시오. 어떤 변수가 사용되어야하는지에 대한 상충되는 정의가있는 것처럼 보였지만 편집되었습니다. 처음에는 '문자열 가중치'가 처음 정의되었고, 'totalweight'는 String이어야합니다 (사용되지 않았지만 명확하게 정의 된) 코드 스 니펫. –

0

정규식을 사용하여 유효성을 검사 할 수 있습니다.

NumberFormat nf = NumberFormat.getNumberInstance(); 
    DecimalFormat df = (DecimalFormat)nf; 
    df.applyPattern("#0.00"); 
    String totalweight = "n/a"; 

    String pattern = "[0-9]*.[0-9]*"; 

    boolean isNan = Pattern.matches(pattern, totalweight); 
    if(!isNan) { 
     System.out.println(totalweight); 
    } 
    else { 
     System.out.println(df.format(Double.parseDouble(totalweight))); 
    } 

당신이 코드