NumberFormatException:对于输入字符串:“5,2”
NumberFormatException: For input string: "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);
}
我在第
行收到异常
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.access00(SampleActivity.java:126)
at com.app.package.DriverActivity.onScanned(SampleActivity.java:913)
at com.appchannel.bluetooth.BHelper.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 那里得到了这个日志。我无法在我的设备上重现此问题。
根据您的区域设置,十进制数的整数部分和小数部分之间的字符可以是 .
、,
或我指定的其他字符不知道。
DecimalFormat
自动使用与您的语言环境相对应的字符,因此它的格式为 5,2
而不是 5.2
.
但是,valueOf
不考虑语言环境。它寻找 .
作为分隔符。所以通过放5,2in there,
valueOf`无法识别
要强制格式化小数格式以便结果与 valueOf
兼容,请尝试使用以下内容创建 DecimalFormat
:
new DecimalFormat("#.##", DecimalFormatSymbols.getInstance(Locale.US));
编辑:
我看到您再次将浮点数转换回字符串并 return 它。为什么不直接 return format
的 return 值?
return decimalFormat.format(len);
5,2不是double或float值,所以你应该过滤错误值!设置文本视图输入类型 !
无需使用十进制格式。
yourfloat*=100f;
yourfloat = Math.round(yourfloat);
yourfloat = yourfloat/100f;
请帮我解决这个问题。我在这里添加代码片段和崩溃日志。
代码:
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.access00(SampleActivity.java:126)
at com.app.package.DriverActivity.onScanned(SampleActivity.java:913)
at com.appchannel.bluetooth.BHelper.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 那里得到了这个日志。我无法在我的设备上重现此问题。
根据您的区域设置,十进制数的整数部分和小数部分之间的字符可以是 .
、,
或我指定的其他字符不知道。
DecimalFormat
自动使用与您的语言环境相对应的字符,因此它的格式为 5,2
而不是 5.2
.
但是,valueOf
不考虑语言环境。它寻找 .
作为分隔符。所以通过放5,2in there,
valueOf`无法识别
要强制格式化小数格式以便结果与 valueOf
兼容,请尝试使用以下内容创建 DecimalFormat
:
new DecimalFormat("#.##", DecimalFormatSymbols.getInstance(Locale.US));
编辑:
我看到您再次将浮点数转换回字符串并 return 它。为什么不直接 return format
的 return 值?
return decimalFormat.format(len);
5,2不是double或float值,所以你应该过滤错误值!设置文本视图输入类型 !
无需使用十进制格式。
yourfloat*=100f;
yourfloat = Math.round(yourfloat);
yourfloat = yourfloat/100f;