2012-04-24 4 views
1

안드로이드 전화에서이 방법은 정상적으로 작동합니다. 그것은 두 배의 숫자를 취하고 점 뒤에 두 개의 십진수로 바뀝니다. 그러나 갤럭시 탭에서 숫자는 0.00이 아니라 0,00으로 바뀝니다. 그래서 String에서 double로 변환하면 예외가 발생합니다. 왜 그렇게 행동하는거야? 다른 지방 (예를 들어 휴대 전화)에이 . 동안 수치 구분자가, ,입니다 태블릿에 설정된 지역으로 인해 태블릿의 지역의 screenshotAndroid : 이상한 은하 탭 동작

답변

2

그것.

당신은이 코드 조각을 사용하여 지역을 변경할 수 있습니다 당신이 원하는 경우

여기 java.util.Local

에서 찾을 수 있습니다 Locale.LOCALITY를 사용하여 입수 할 수

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Local.GERMAN); 
otherSymbols.setDecimalSeparator(','); 
otherSymbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat(formatString, otherSymbols); 

현재 현지 당신을 위해 workaround입니다.
여기에 아주 좋은 question with related answers (여기에 넣은 것을 포함하여)이 있습니다.

+0

를 작동하거나 물론, 당신이 원하는 방식으로 작동 로케일을 지정합니다. –

+0

@JonSkeet 네,하지만 어쩌면 그들이 사는 곳을 좋아합니다 : P, 이것은 사실입니다. – Serdalis

+0

나는 이것을 시도했다. String rezS = twoDForm.format (d); \t if (rezS.contains (",") "{ \t \t rezS.replace (',', '.'); \t}', '.'을 '.'로 바꾸려고했는데 작동하지 않는 것 같습니다. 여전히 ','와 함께 반환됩니다. 내가 코드에서 언급 한대로 구분 기호를 변경하려고합니다 –

0

로케일과 DecimalFormat 클래스 및 모든 분리 기호로 재생하려고했으나 문제가 해결되지 않았습니다. 그것은 잘못된 결과를 나에게 돌려 주었고, 나는 그것을 파싱 할 수 없었다. 그래서 나는 해킹했고 Math.round(float)을 사용하여 100 * d (입력)를 포함하는 float를주었습니다. 그래서 라운드 한 후에 나는 100으로 나누고 구분 기호 뒤에 두 개의 소수를 얻습니다.

public static float roundTwoDecimals(double d) { 

    float rez = (float) (d * 100); //multiply for round 
    rez = Math.round(rez); 
    int rezInt = (int) rez; 
    rez = rezInt; //convert to int to remove unwanted tail 
    rez = rez/100; //get back to two decimals float 
    return rez; 
} 

나는이 가장 생각이 아니라고 생각하지만 실제로

+0

이 아이디어는 훌륭하지만 123546789가 2147483647로 변환되는 이유를 모르겠습니다. 'Math.round()'이 사용되었습니다. 어떤 아이디어? –

+0

이 솔루션을 잊어 버리십시오. 나는 Serdalis one으로 돌아 왔고 로케일을 미국으로 바 꾸었습니다 (심지어 저는 여기가 아닙니다). –

+0

괜찮습니다. 십진수 형식의 기호 만 바꾸고 다른 것은 바꾸지 않을 것입니다. D, 나머지 프로그램은 마치 당신의 지역에서 그 것처럼 행동합니다. – Serdalis