이 문제로 도와주세요. 코드 스 니펫과 충돌 로그를 여기에 추가하고 있습니다.NumberFormatException : 입력 문자열 : "5,2"
코드 :
if (rssi <= -30 && rssi >= -90) {
double len = ((rssi + 20) * -1)/10.0;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(len));
return String.valueOf(twoDigitsF);
}
내가 내 로그
Fatal Exception: java.lang.NumberFormatException: For input string: "5,2"
at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
at java.lang.Float.valueOf(Float.java:424)
at com.app.package.utils.Util.getRange(Util.java:26)
at com.app.package.DriverActivity.scanDone(SampleActivity.java:982)
at com.app.package.DriverActivity.access$1300(SampleActivity.java:126)
at com.app.package.DriverActivity$11.onScanned(SampleActivity.java:913)
at com.appchannel.bluetooth.BHelper$1.run(BHelper.java:67)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6317)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
내가 Crashlytics에서이 로그를 가지고 부착하고있는 라인 여기
float twoDigitsF = Float.valueOf(decimalFormat.format(len));
에서 예외를 얻고있다. 내 장치에서이 문제를 재현 할 수 없습니다.
'5,2'는 "일반적인 Java float"을 따르지 않습니다. 여기에 숨어있는 "현지화"에 대한 질문이있을 수 있습니다. 이상적으로 코드는 DecimalFormat을 중간 단계로 사용하지 않고 * 표시 *를 생성하는 데 사용합니다. 여기에서는 중간 단계로만 사용되며 최종 결과 *에는 두 개의 후행 숫자가있을 수 있습니다. – user2864740
즉 :'return decimalFormat.format (len);'으로 충분해야합니다. 장치의 현지화 설정에 따라 "5,2"또는 이와 비슷한 값이 반환됩니다. – user2864740
현지화에 문제가 있습니다. 이 double 값이 쉼표로 구분 된 문자열 (5,2)로 바뀌는 방식으로 포맷터에 double 값을 전달합니다. 현지화가 진행된다면 어떻게 해결할 수 있습니까? – SunSun