2014-03-05 1 views
3

: 나는 '경우안드로이드는 NumberFormatException : 잘못된 더블 - 값을 제외하고는 유효 그래서 다른 날, 다음과 같은 오류가 Google Play 개발자 콘솔의 충돌 부분에 팝업을 두 번

java.lang.NumberFormatException: Invalid double: "−0.05" 

지금 날 수정 m 잘못되었지만 실제로는 유효한 이중입니다. 내 컴퓨터, 에뮬레이터 및 내 Android 기기 (Nexus 5)에서 유효한 double로 인식됩니다.

충돌이 발생하는 기기는 Galaxy Android 4.3을 실행하는 Note II - 왜 충돌 할 수 있는지에 대한 아이디어가 있습니까?

+2

코드를 표시하십시오. 사용자가 소수점 구분 기호로','를 사용하여'Locale'을 사용하여 실행 한 것 같습니다. 명시 적 로케일로 숫자를 파싱합니다. – laalto

+0

'Locale' 문서 – zapl

답변

9

로캘에 따라 유효하거나 또는 두 배가 아닙니다. US/ENGLISH 로케일의 경우 -0.05은 유효한 이중이지만 FRENCH 로켈을 사용합니다 (예 : 쉼표가있는 -0,05이어야 함). 문제는 어쩌면 아니다 그러나

NumberFormat fmt = NumberFormat.getNumberInstance(Locale.US); 
double d = fmt.parse("-0.05").doubleValue(); //-0.05 

fmt = NumberFormat.getNumberInstance(Locale.FRENCH); 
d = fmt.parse("-0.05").doubleValue(); //-0.0 
d = fmt.parse("-0,05").doubleValue(); //-0.05 

편집

:

당신은 행동에 그것을 볼 수 있습니다. 마이너스 기호가 유효하지 않습니다. - 대신 을 사용하고 있습니다 (동일하게 보이지만 같은 문자는 아닙니다). 데모 :

Double.parseDouble("-0.05"); //ok 
Double.parseDouble("−0.05"); //exception 
+0

내 유일한 문제는 내 앱 사용자의 기기 중 약 50 %가 영어가 아닌 언어를 사용한다는 것입니다. 따라서 몇 달 동안 한 번만, 수천 개의 기기에서이 문제가 발생하는 이유는 무엇입니까? –

+0

@BenEzard 번호를 어떻게 파싱합니까? 'Double.parseDouble'? – assylias

+0

그래, 그냥 그 방법 - 그리고 입력 문자열은 항상 '.' (내 서버에서 다운로드 한 파일이므로이 형식이어야 함) –

0

이중 상수의 경우, 언어에서 -0.05d ("d"접미어) 형식을 사용할 것을 요구합니다. reference

에 대해서도 참조하십시오. 빼기 기호로 된 기호가 "하이픈"이고 "긴 대시"가 아닌지 확인하십시오.

+1

에 [기본 로케일주의] (http://developer.android.com/reference/java/util/Locale.html)라는 멋진 섹션이 있습니다. 필수 사항은 아닙니다. 접미사 "f"또는 "d"가없는 부동 소수점 숫자는 자동으로 이중으로 결정됩니다. 실제로 링크의 부동 소수점 리터럴 섹션 아래에'double d1 = 123.4; '라고 쓰여집니다. –

+0

빼기 기호 - 다른 모든 장치에서 정상적으로 작동하면 올바른 문자로 추정됩니까? –

관련 문제