NumberFormatException:对于输入字符串:“5,2”

时间:2017-12-21 00:12:55

标签: android numberformatexception

请帮我解决这个问题。我在这里添加代码片段和崩溃日志。

代码:

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);
}

我在

行获得了例外
float twoDigitsF = Float.valueOf(decimalFormat.format(len));

这里我附上了我的日志

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那里得到了这个日志。我无法在设备上重现此问题。

3 个答案:

答案 0 :(得分:2)

根据您的语言环境设置的内容,小数部分和小数部分的小数部分之间的字符可以是.,或其他我不知道的地方的。

DecimalFormat会自动使用与您的语言区域对应的字符,这就是为什么它会格式化为5,2而非5.2的内容。

但是,valueOf不考虑区域设置。它查找.作为分隔符。所以通过放置5,2 in there, valueOf`无法识别它。

要强制使用小数格式进行格式化以使结果与valueOf兼容,请尝试使用以下内容创建DecimalFormat

new DecimalFormat("#.##", DecimalFormatSymbols.getInstance(Locale.US));

编辑:

我看到你再次将float转换回字符串并返回它。为什么不直接返回format的返回值?

return decimalFormat.format(len);

答案 1 :(得分:0)

5,2不是double或float值,所以你应该过滤错误值!设置textview inputtype!

答案 2 :(得分:0)

无需使用小数格式。

yourfloat*=100f;
yourfloat = Math.round(yourfloat);
yourfloat =  yourfloat/100f;