Android - NumberFormatException 问题

Posted

技术标签:

【中文标题】Android - NumberFormatException 问题【英文标题】:Android - NumberFormatException Issue 【发布时间】:2015-05-14 13:36:56 【问题描述】:

我在输入带小数点的值时遇到以下代码问题。我输入 56. 或 56.3 或 56.345 都没有关系,它仍然会使应用程序崩溃并抛出 NumberFormatException。

这里是抛出异常的代码:

private boolean isNumeric(String str) 
    try
        Float.parseFloat(str);
    
    catch(NumberFormatException e) 
        return false;
    
    return true;

这是来自 logcat 的异常:

05-14 08:54:08.127  31142-31142/com.ritchieengineering.yellowjacket E/androidRuntime﹕ FATAL EXCEPTION: main
Process: com.ritchieengineering.yellowjacket, PID: 31142
java.lang.NumberFormatException: Invalid int: "2.5"
        at java.lang.Integer.invalidInt(Integer.java:137)
        at java.lang.Integer.parse(Integer.java:374)
        at java.lang.Integer.parseInt(Integer.java:365)
        at java.lang.Integer.parseInt(Integer.java:331)
        at java.lang.Integer.valueOf(Integer.java:489)
        at com.ritchieengineering.yellowjacket.fragment.TargetSubcoolingFragment.isValidValue(TargetSubcoolingFragment.java:164)
        at com.ritchieengineering.yellowjacket.fragment.TargetSubcoolingFragment.onOptionsItemSelected(TargetSubcoolingFragment.java:89)
        at android.app.Fragment.performOptionsItemSelected(Fragment.java:1806)
        at android.app.FragmentManagerImpl.dispatchOptionsItemSelected(FragmentManager.java:1978)
        at android.app.Activity.onMenuItemSelected(Activity.java:2711)
        at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1094)
        at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
        at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
        at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:645)
        at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:210)
        at android.view.View.performClick(View.java:4637)
        at android.view.View$PerformClick.run(View.java:19422)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5586)
        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:1268)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
        at dalvik.system.NativeStart.main(Native Method)

当我进入 56.3 或 56.345 时,我可以做些什么来防止这个异常被抛出?如何检查以确保人们只输入小数点后一位的值,如 56.3?任何帮助将不胜感激。

【问题讨论】:

请发布您的异常日志。 而您的默认语言环境是...??? 【参考方案1】:

听起来您的本地文化设置为使用, 作为小数点分隔符而不是.。您可以使用NumberFormat 明确设置您的本地文化:

NumberFormat format = NumberFormat.getInstance(Locale.FRENCH);
Number number = format.parse("1,234");
float f = number.floatValue();

【讨论】:

以上是关于Android - NumberFormatException 问题的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录