java.lang.NumberFormatException: Invalid double: "−0.05"
지금 날 수정 m 잘못되었지만 실제로는 유효한 이중입니다. 내 컴퓨터, 에뮬레이터 및 내 Android 기기 (Nexus 5)에서 유효한 double로 인식됩니다.
충돌이 발생하는 기기는 Galaxy Android 4.3을 실행하는 Note II - 왜 충돌 할 수 있는지에 대한 아이디어가 있습니까?
java.lang.NumberFormatException: Invalid double: "−0.05"
지금 날 수정 m 잘못되었지만 실제로는 유효한 이중입니다. 내 컴퓨터, 에뮬레이터 및 내 Android 기기 (Nexus 5)에서 유효한 double로 인식됩니다.
충돌이 발생하는 기기는 Galaxy Android 4.3을 실행하는 Note II - 왜 충돌 할 수 있는지에 대한 아이디어가 있습니까?
로캘에 따라 유효하거나 또는 두 배가 아닙니다. 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
내 유일한 문제는 내 앱 사용자의 기기 중 약 50 %가 영어가 아닌 언어를 사용한다는 것입니다. 따라서 몇 달 동안 한 번만, 수천 개의 기기에서이 문제가 발생하는 이유는 무엇입니까? –
@BenEzard 번호를 어떻게 파싱합니까? 'Double.parseDouble'? – assylias
그래, 그냥 그 방법 - 그리고 입력 문자열은 항상 '.' (내 서버에서 다운로드 한 파일이므로이 형식이어야 함) –
이중 상수의 경우, 언어에서 -0.05d ("d"접미어) 형식을 사용할 것을 요구합니다. reference
에 대해서도 참조하십시오. 빼기 기호로 된 기호가 "하이픈"이고 "긴 대시"가 아닌지 확인하십시오.
에 [기본 로케일주의] (http://developer.android.com/reference/java/util/Locale.html)라는 멋진 섹션이 있습니다. 필수 사항은 아닙니다. 접미사 "f"또는 "d"가없는 부동 소수점 숫자는 자동으로 이중으로 결정됩니다. 실제로 링크의 부동 소수점 리터럴 섹션 아래에'double d1 = 123.4; '라고 쓰여집니다. –
빼기 기호 - 다른 모든 장치에서 정상적으로 작동하면 올바른 문자로 추정됩니까? –
코드를 표시하십시오. 사용자가 소수점 구분 기호로','를 사용하여'Locale'을 사용하여 실행 한 것 같습니다. 명시 적 로케일로 숫자를 파싱합니다. – laalto
'Locale' 문서 – zapl