TextWatcher - 在 Android Studio 中解析 editText 中的负值

问题描述

我使用editTexts实时计算一些值,所以我使用textWatcher:

@Override
            public void afterTextChanged(Editable s) {

                if (editTextNumer1.hasFocus()) {
                    if (s.length() != 0)  {
                                        
number1 = Float.parseFloat(editTextNumber1.getText().toString());
number2 = (float) (number1 * 1.66));
number3 = (float) (number1 + 23.175);
                                    }
editTextNumber2.setText(String.format(Locale.getDefault(),"%.3f",number2));
editTextNumber3.setText(String.format(Locale.getDefault(),number3));
.
.
.

我也需要使用负值,我知道我无法解析“-”符号,这就是在键盘上按下“-”后应用程序崩溃的原因。 只是无法找到解决方法。 有人可以帮忙吗? 谢谢

解决方法

您不能将“-”符号解析为整数/浮点数,因为它是字符。

您可以做的是检查字符串中的第一个字符,并检查它是否包含“-”符号或只是一个数字。

@Override
public void afterTextChanged(Editable s) {

    if (editTextNumer1.hasFocus()) {
        if (s.toString().length() != 0)  {
            float number1 =0f;
            int text_size = editTextNumber1.getText().toString().length();
            if (s.toString().substring(0,1).equals("-")){
                number1 = Float.parseFloat(editTextNumber1.getText().toString().substring(1,text_size-1));
            }else{
                number1 = Float.parseFloat(editTextNumber1.getText().toString());
            }    
            float number2 = (float) (number1 * 1.66));
            float number3 = (float) (number1 + 23.175);
            editTextNumber2.setText(String.format(Locale.getDefault(),"%.3f",number2));
            editTextNumber3.setText(String.format(Locale.getDefault(),number3));
            
        }
    

    }
...
}

,
I found the solution that works for me:


   

        
     @Override
     public void afterTextChanged(Editable s) {
     if (editTextNumber1.hasFocus()) {
                if (s.length() != 0) {
    
    
                String first = editTextNumber1.getText().toString();
                if (first.equals("-")) {
                                       //do nothing,or whatever
    }
    
    else {

    number1 = Float.parseFloat(editTextNumber1.getText().toString()); 
                                            number2 = (float) (number1 * 1.66);
                                            number3 = (float) (number1 + 23.175);
                editTextNumber2.setText(String.format(Locale.getDefault(),number2));
                editTextNumber3.setText(String.format(Locale.getDefault(),number3));
    }

基本上,只要它传递字符串中的第一个字符,“-”符号就不再有问题。效劳于 ”。”也有小数点。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...