Android Float.parseFloat会因小数点而导致致命错误

时间:2016-10-21 20:08:25

标签: android

我正在使用以下代码从字符串中解析float:

 EditText CurrPLC = (EditText) findViewById(R.id.CurrPLC);
 String s5 = CurrPLC.getText().toString();
 float F5 = Float.parseFloat(s5);

这很有效,直到我尝试将负值写入EditText。因为“否定”符号与小数点位于同一个按钮上,所以我先写一个小数,然后应用程序因为字符串“。”而崩溃。无法解析为浮点值。代码将在EditText

中的任何文本更改时执行

以下是布局文件中的EditText代码:

 <EditText
            android:id="@+id/CurrPLC"
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:padding="2dp"
            android:hint="eg. 3277"
            android:gravity="center_horizontal"
            android:layout_gravity="right"
            android:textSize="13sp"
            android:digits="-0123456789."
            android:inputType="numberSigned|numberDecimal"
            android:maxLength="10"
            android:background="@drawable/plc_edit_text_holo_light"
            android:layout_marginRight="19dp"
            android:layout_marginEnd="19dp"
            android:layout_alignBaseline="@+id/CurrPLCLabel"
            android:layout_alignBottom="@+id/CurrPLCLabel"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true" />
        />

有没有我做错了,或者这只是在发生错误之前处理这个问题?

由于

1 个答案:

答案 0 :(得分:0)

根据您使用TextWatcher的注释,该注释会尝试在每次按键时解析浮点数,问题不在于负数。

parseFloat()可以正数处理负数。问题是空字符串或--..最有可能。

因此,您不应该在每次按键时解析,而只是在您需要的任何地方进行解析(我不确定您的完整用例,因此我无法评论适当的时间和地点进行解析漂浮)。否则,您需要为try添加catch / java.lang.NumberFormatException,无论您当前正在解析浮点数。