算术运算

Arithmetic Operation

大家好,我遇到了这个问题。当我在 editText 中输入分数时,我希望应用程序在 Textview 中生成等效项(带有红色框)。但是应用程序因这段代码而崩溃。

private void calculateEquivalent(){
        double x , y;
        y = Double.valueOf(total_score.toString());
        x = Double.valueOf(editScore.getText().toString());

        if (x >= y * 0.65){
            double equivalent = (Math.round((100 + (72 * (x - y)) / y)));
            String equi = String.valueOf(equivalent);
            textEquivalent.setText(equi);
        } else {
            double equivalent = (Math.round((75 + (23 * (x - y * 0.65)) / y)));
            String equi = String.valueOf(equivalent);
            textEquivalent.setText(equi);
        }
    }

string转double报错为空字符串

在此代码中

y = Double.valueOf(total_score.toString());

x = Double.valueOf(editScore.getText().toString());

可能是 total_score.toString() 或 editScore.getText().toString() 为空

total_score变量的类型是什么

尝试将空字符串转换为双精度时遇到问题。您应该首先通过捕获 NumberFormatException

检查文本字段是否为空并且不包含字符

如错误日志所示,您需要确保在开始计算之前具有正确的值。

因此在调用此函数之前,您需要检查以下条件:

try
        {
        if((total_score.toString() != null && !total_score.toString().isEmpty()) && (editScore.getText().toString()!=null && !editScore.getText().toString().isEmpty()))
            {
                y = Double.valueOf(total_score.toString());

                x = Double.valueOf(editScore.getText().toString()); //chances of getting a Numberformat exception if entered value is not a number

                calculateEquivalent();
            }
        }
        catch(NumberFormatException e)
        {
        //Toast.makeText(m_context, "You entered a wrong value,Please enter only numeric values", Toast.LENGTH_SHORT).show();   
          e.printStackTrace();
        }
        catch(Throwable e)
        {
          e.printStackTrace();
        }

也在你的calculateEquivalent()中;方法,您需要确保 y 的值不应该为零。

希望对您有所帮助:)

嘿@callmejeo 你上面写的函数的主要问题是你正在将 "NULL" 值转换成字符串,所以你可以做的一件事就是处理异常。

 private void calculateEquivalent(){

       try{
            double x , y;
            y = Double.valueOf(total_score.toString());
            x = Double.valueOf(editScore.getText().toString());

            if (x >= y * 0.65){
                double equivalent = (Math.round((100 + (72 * (x - y)) / y)));
                String equi = String.valueOf(equivalent);
                textEquivalent.setText(equi);
            } else {
                double equivalent = (Math.round((75 + (23 * (x - y * 0.65)) / y)));
                String equi = String.valueOf(equivalent);
                textEquivalent.setText(equi);
            }
}
   catch(Exception e){
         Toast.makeText(this,"Please Enter some value",Toast.LENGTH_LONG).show();
   }
}

非常感谢你们,没有你们的建议我可能陷入了这个问题:) 然后我想到了这个

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_student_quiz);

        TextWatcher inputTextWatcher = 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) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                calculateEquivalent();
            }
        };
        editScore.addTextChangedListener(inputTextWatcher);

    }

private void calculateEquivalent(){
        try {
            y = Double.parseDouble(total_score);
            x = Double.parseDouble(editScore.getText().toString());
            if (x >= y * 0.65){
                double equivalent = (Math.round((100 + (72 * (x - y)) / y)));
                String equi = String.valueOf(equivalent);
                textEquivalent.setText(equi);

            } else {
                double equivalent = (Math.round((75 + (23 * (x - y * 0.65)) / y)));
                String equi = String.valueOf(equivalent);
                textEquivalent.setText(equi);
            }
        }catch (Exception e){
            Toast.makeText(getApplicationContext(), "Please Enter a Number", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }

    }