안드로이드 전화에서이 방법은 정상적으로 작동합니다. 그것은 두 배의 숫자를 취하고 점 뒤에 두 개의 십진수로 바뀝니다. 그러나 갤럭시 탭에서 숫자는 0.00이 아니라 0,00으로 바뀝니다. 그래서 String에서 double로 변환하면 예외가 발생합니다. 왜 그렇게 행동하는거야? 다른 지방 (예를 들어 휴대 전화)에이 .
동안 수치 구분자가, ,
입니다 태블릿에 설정된 지역으로 인해 태블릿의 지역의 Android : 이상한 은하 탭 동작
답변
그것.
당신은이 코드 조각을 사용하여 지역을 변경할 수 있습니다 당신이 원하는 경우
여기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 (여기에 넣은 것을 포함하여)이 있습니다.
로케일과 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;
}
나는이 가장 생각이 아니라고 생각하지만 실제로
이 아이디어는 훌륭하지만 123546789가 2147483647로 변환되는 이유를 모르겠습니다. 'Math.round()'이 사용되었습니다. 어떤 아이디어? –
이 솔루션을 잊어 버리십시오. 나는 Serdalis one으로 돌아 왔고 로케일을 미국으로 바 꾸었습니다 (심지어 저는 여기가 아닙니다). –
괜찮습니다. 십진수 형식의 기호 만 바꾸고 다른 것은 바꾸지 않을 것입니다. D, 나머지 프로그램은 마치 당신의 지역에서 그 것처럼 행동합니다. – Serdalis
를 작동하거나 물론, 당신이 원하는 방식으로 작동 로케일을 지정합니다. –
@JonSkeet 네,하지만 어쩌면 그들이 사는 곳을 좋아합니다 : P, 이것은 사실입니다. – Serdalis
나는 이것을 시도했다. String rezS = twoDForm.format (d); \t if (rezS.contains (",") "{ \t \t rezS.replace (',', '.'); \t}', '.'을 '.'로 바꾸려고했는데 작동하지 않는 것 같습니다. 여전히 ','와 함께 반환됩니다. 내가 코드에서 언급 한대로 구분 기호를 변경하려고합니다 –