Android NumberFormatException:对于输入字符串:";5,2“;

Android NumberFormatException:对于输入字符串:";5,2“;,android,numberformatexception,Android,Numberformatexception,请帮我解决这个问题。我在这里添加代码片段和崩溃日志 代码: 这里我附上我的日志 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)

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

代码:

这里我附上我的日志

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

根据您的区域设置,十进制数的整数部分和小数部分之间的字符可以是
,或者我不知道的其他字符

DecimalFormat
自动使用与您的区域设置相对应的字符,因此它的格式为
5,2
而不是
5.2

但是,
valueOf
不考虑区域设置。它寻找
作为分隔符。所以把5,2
放进去,
valueOf`就不能识别它了

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

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

我看到您再次将浮点值转换回字符串并返回它。为什么不直接返回
格式的返回值呢

return decimalFormat.format(len);

5,2不是双精度或浮点值,所以您应该过滤错误值!设置文本视图输入类型

无需使用十进制格式

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

5,2
不符合“普通Java浮点”。这里可能有一个关于“本地化”的问题。理想情况下,代码不会使用DecimalFormat作为中间步骤—使用它生成显示。在这里,它仅用作中间步骤,在这种情况下,最终结果可能不仅有两个尾随数字。即:
return decimalFormat.format(len)应该足够了。(请注意,根据设备上的本地化设置,这将返回“5,2”或类似值。)本地化存在一些问题。我将双精度值传递给格式化程序,这是如何将双精度值更改为逗号分隔的字符串(5,2)的。如果是本地化,我该如何解决它?我会停止不必要的步骤,并考虑结果是否应该本地化:谢谢。用户2864740。我会换的。
return decimalFormat.format(len);
yourfloat*=100f;
yourfloat = Math.round(yourfloat);
yourfloat =  yourfloat/100f;