由使用逗号而不是点作为小数分隔符的浮点数引起的 NumberFormatException

the*_*uls 0 java floating-point android 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
Run Code Online (Sandbox Code Playgroud)

我知道异常发生在“0,05”字符串上,但我不知道它是如何变成这样的,因为第一个 ArrayList 中的所有内容在转换为字符串之前在某个时刻都是浮点数。似乎在他的手机上,浮点数中的点由于某种原因变成了逗号,每当我尝试将其转换回浮点数时,它都会导致 NumberFormatException。我可以做什么来解决这个问题?(请注意,这只发生在某些设备上!)

谢谢!

Bre*_*ken 5

这似乎可能与在不同的区域设置(例如德国)中运行有关,其中小数分隔符为“,”。

如果您实际上正在解析用户输入,则需要使用 NumberFormat解析数据。