【问题标题】:Calculator that accepts floating point values接受浮点值的计算器
【发布时间】:2018-12-10 17:08:49
【问题描述】:

我目前正在学习使用 Android Studios,但我很困惑。 我正在做的练习是创建一个带有 +、-、/ 按钮的计算器。我已经完成了计算器,并且我已经让它工作了,除了一个实例。

每当我输入一个浮点数时,即使只有一位小数,程序也会崩溃。我在尝试除以零时也遇到了这种情况,我通过用 try 和 catch 包围代码解决了这个问题。

但是,我不知道应该如何让小数起作用。如果您能查看我的代码并帮助我解决这个问题,我将不胜感激。我的程序包含一个主 java 类和一个主 xml_class。我会把它们贴在下面:

MainActivity.java:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener {
    private Button btnAdd,btnSubtract,btnDivide,btnMultiply;
    private TextView tvresult;
    private EditText etfirst, etsecond;

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

private void init() {
    btnAdd =(Button) findViewById(R.id.btnAdd);
    btnSubtract = (Button) findViewById(R.id.btnSubtract);
    btnDivide = (Button) findViewById(R.id.btnDivide);
    btnMultiply = (Button) findViewById(R.id.btnMultiply);
    etfirst = (EditText) findViewById(R.id.etFirstNumber);
    etsecond = (EditText) findViewById(R.id.etSecondNumber);
    tvresult = (TextView) findViewById(R.id.tvResult);

    btnAdd.setOnClickListener(this);
    btnSubtract.setOnClickListener(this);
    btnMultiply.setOnClickListener(this);
    btnDivide.setOnClickListener(this);
}

@Override
   public void onClick(View view) {
    String num1 = etfirst.getText().toString();
    String num2 = etsecond.getText().toString();

    switch (view.getId()) {
        case R.id.btnAdd:
            double addition = Double.parseDouble(num1) + 
            Double.parseDouble(num2);
            tvresult.setText(String.valueOf(addition));
            break;

        case R.id.btnSubtract:
            double subtraction = Double.parseDouble(num1) - 
            Double.parseDouble(num2);
            tvresult.setText(String.valueOf(subtraction));
            break;

        case R.id.btnMultiply:
            double multiply = Double.parseDouble(num1) * 
            Double.parseDouble(num2);
            tvresult.setText(String.valueOf(multiply));
            break;

        case R.id.btnDivide:
            try {
                double division = Double.parseDouble(num1) /  
                Double.parseDouble(num2);
                tvresult.setText(String.valueOf(division));

            } catch (Exception e) {
                tvresult.setText("Cannot Divide!");
            }
            break;
    }
}       }
}

【问题讨论】:

  • 您始终可以将 num1num2 解析为适用于整数和浮点的双精度 (Double.valueOf) - 然后问题就变成了格式化答案之一。

标签: android floating-point double calculator


【解决方案1】:

全部更改

Integer.parseInt()

Double.parseDouble()

所有变量声明为double 而不是int
应用程序因

而崩溃
java.lang.NumberFormatException

当您尝试将1.1 之类的值解析为Integer 时。

【讨论】:

  • 谢谢你,我怎么没注意到它。正如您在上面编辑的代码中所见,我将所有 int 更改为双精度数。但它仍然崩溃。我错过了什么?
  • @wznd 只有在你写的时候才会崩溃。 ?
  • 你是如何测试它的?我将代码粘贴到一个新项目中,并将包更改为正确的名称,但我的模拟器中没有显示任何应用程序。
  • 我将您的代码、java 和 xml 粘贴到一个新项目中,它工作正常,只是布局充满了错误,因为您没有限制视图。
  • 如何约束它们?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2020-09-18
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多