2011-10-18 6 views
0

나는 내 app 언어를 종속적으로 만드는 데에 열중하고있다. 사용자가 플로트를 입력해야합니다. EditText를 사용하여 현재 값을 표시하고 편집을 허용합니다. 내가 코딩 준비하려면 : 사용자 언어에 따라 부동 소수점 표현

st = String.format("%.2f", myFloat); 
edTxt = (EditText) findViewById(R.id.myEditText); 
edTxt.setText(st, TextView.BufferType.EDITABLE); 
edTxt.selectAll(); 

이제 사용자는 값을 표시됩니다. 내 장치의 설정에서 언어를 독일어 (독일어)로 설정 한 경우 부동 소수점 값 2.80은 2,80으로 표시됩니다. 활동의 onPause에서 값을 검색하여 문자열에서 부동으로 변환하고 쉼표 때문에 NumberFormatException 오류가 발생합니다.

String st =""; 
st = edTxt.getText().toString(); 
st.replace(",", "."); 
try{ 
    float minV = Float.valueOf(st); 
} catch (NumberFormatException nfe){ 
    mShowAToast("NumberFormatException: " + st); 
} 

과 놀라움을 : 난, 난 그냥 점으로 쉼표를 교체 할 필요가 생각하고 코딩 쉽게해야합니다 응용 프로그램은 캐치로 실행하고 토스트로 "2,80"대신 일을 보여줍니다 "2.80", st.replace는 그 일을하지 않았다. (아마도 그랬지만) 나는 무엇을 감독합니까?

답변

2

소수점 구분 기호로 ','를 사용하는 float 값이있는 경우. Locale 클래스를 사용하여 파싱 할 수 있습니다. 다음 코드를 확인하십시오.

public static void main(String[] args) { 
    try { 
     // Number and NumberFormat are in java.text.*; 
     Number numberG = NumberFormat.getNumberInstance(java.util.Locale.GERMAN).parse("-1.234,56"); 
     if (numberG instanceof Double) { 
      System.out.println(">" + numberG.doubleValue()); 
     } 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
} 

이 인쇄됩니다 :

>-1234.56 

을 그래서 그 대신 사용 당신이가 기본으로 로케일 사용할 수 있습니다 java.util.Locale.GERMAN : java.util.Locale.getDefault에()를 당신의 JVM의.

String의 대체 기능에 대해서는 Android API와 Oracle JDK의 사양을 비교했으며 둘 다 동일합니다. 그래서 나는 그것이 당신이 기대 한 것을 반환해야한다고 생각합니다. 이런 경우에 내 JDK에 folowing을 시도 :

String value = "-1.234,56"; 
    System.out.println(value.replace(',', '.')); 
    System.out.println(value.replace(",", ".")); 

그리고 모두 인쇄 : -1.234.56

+0

그라시아 에르네스토,이 작품을,하지만 ... 나는 로케일을 많이 가지고해야 할 것 .XXX 문을 사용하여 가능한 모든 로케일을 처리합니다. 문제는 st.replace 선언문에서 무슨 일이 벌어지고 있는가? – Addi

+0

Gracias가 @Ernesto를 다시 편집합니다. 팁 java.util.Locale.getDefault()가 문제를 해결합니다. 그리고 예, replace에 반환 값을 지정하면 작동합니다. 복사 붙여 넣기 오류가 발생하여 지속적으로 간과 해 버렸습니다 .-(대체 주제에 시간을 낭비하게되어 죄송합니다. – Addi

관련 문제