2014-06-13 3 views
-1

현재 많은 수의 테스터로 내 앱을 테스트하고 있으며 일부 장치에는 다른 문제가 발생하지 않는 정말 이상한 문제가 있습니다.NumberFormatException 소수점 구분 기호로 점 대신 쉼표가있는 부동 소수점으로 인해 발생했습니다.

어떤 이유로 이러한 문제 중 하나는 일부 문자열을 Float로 변환 할 때 발생하는 NumberFormatException입니다 (모두 ArrayList에서 제공됨). 내 장치에서 아무 일도 일어나지 않고 모든 문자열이 문제없이 변환됩니다. 그러나 다른 사람의 장치에, 우리는 다음과 같은 로그에 예외를 얻을 :

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fuzzfit/activities.ReportListViewActivity}:   

java.lang.NumberFormatException: Invalid float: "0,05" 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
at android.app.ActivityThread.access$800(ActivityThread.java:135) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5001) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NumberFormatException: Invalid float: "0,05" 
at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
at java.lang.StringToReal.parseFloat(StringToReal.java:310) 
at java.lang.Float.parseFloat(Float.java:300) 
at activities.ReportListViewActivity.getBiggestItem(ReportListViewActivity.java:141) 
at activities.ReportListViewActivity.onCreate(ReportListViewActivity.java:130) 
at android.app.Activity.performCreate(Activity.java:5231) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
... 11 more 

나는 예외가 "0.05"문자열에 발생하는 것을 알고 있지만, 그것도에서 것을되었다 어떻게 아무 생각이 없다 첫 번째 ArrayList의 모든 부분이 String으로 변환되기 전에 어떤 지점에서 부동 소수점이었습니다. 그것은 마치 그의 전화에서 플로트 번호의 점이 어떤 이유로 쉼표로 변하는 것처럼 보입니다. 그리고 다시 플로트로 변환하려고 시도 할 때마다 NumberFormatException이 발생합니다. 이 문제를 해결하기 위해 무엇을 할 수 있습니까? (일부 기기에서만 발생합니다.)

감사합니다.

+0

"일부 장치"부분은 다른 국가에서 소수 구분 기호로 쉼표를 사용하고 해당 장치가 기본값 일 수 있기 때문일 수 있습니다. 빠른 정규식은 그것을 고쳐야한다. – awksp

+1

http://stackoverflow.com/questions/4375410/recommended-way-to-format-numbers-in-a-locale-aware-way – kosa

답변

4

소수 구분 문자가 ','인 다른 로케일 (예 : 독일)에서 실행되는 것과 관련이있는 것 같습니다.

실제로 사용자 입력을 구문 분석하는 경우 데이터를 구문 분석하려면 NumberFormat을 사용해야합니다.