java.lang.NumberFormatException: For input string: “.“

Posted 無昂博奥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.NumberFormatException: For input string: “.“相关的知识,希望对你有一定的参考价值。

android开发的过程中,有时候对输入框中的值进行数字类型转换时经常出现NumberFormatException。其根本原因就是被转换的字符不是一个数字。

下面是我遇到的一种情况:

xml内容如下:

 <EditText
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:maxEms="7"
        android:maxLength="7"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:inputType="numberDecimal" />

复现步骤:

在输入框中,直接输入.时出现异常。

异常日志:

java.lang.NumberFormatException: For input string: "."
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
        at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
        at java.lang.Float.parseFloat(Float.java:452)

原因分析

在Java代码中设置了addTextChangedListener监听器,当文本改变的时候,进行了数字类型转换。所以在转换的时候就会有一个风险,就是当输入的不是数字类型的字符时,就会出现NumberFormat异常。

etActualVol.addTextChangedListener(new TextWatcher() 
                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) 
                        

                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) 
                            if (!s.toString().trim().equals("")) 
                                 Float.parseFloat(input);
                            
                        

                        @Override
                        public void afterTextChanged(Editable s) 
                        
                    );

解决办法

在监听文本变化的函数中增加判断函数,或者增加校验规则。

etActualVol.addTextChangedListener(new TextWatcher() 
                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) 
                        

                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) 
                            if (!s.toString().trim().equals("") && !s.toString().startsWith(".")) 
                                Float.parseFloat(input);
                            
                        

                        @Override
                        public void afterTextChanged(Editable s) 
                        
                    );

以上只是我遇到的情况之一,在开发的过程中肯定还会有其它的情况出现。只要知道了为什么会出现这个异常,大概排查的思路也就清晰了。
希望能帮到读者,感谢点赞。

以上是关于java.lang.NumberFormatException: For input string: “.“的主要内容,如果未能解决你的问题,请参考以下文章