Java 计算返回无穷大

Java calculation returning infinity

好久没在这里问问题了! 我正在制作一个 Android 应用程序,因此,当 运行 这段代码时遇到这个问题。:

Button calc = (Button) findViewById(R.id.btnCalculate);
    calc.setOnClickListener(new View.OnClickListener()

    {
        public void onClick(View v) {

            EditText number1 = (EditText) findViewById(R.id.dnp);
            EditText number2 = (EditText) findViewById(R.id.ponte);
            EditText number3 = (EditText) findViewById(R.id.aro);
            EditText number4 = (EditText) findViewById(R.id.ed);
            EditText number5 = (EditText) findViewById(R.id.esf);
            EditText number6 = (EditText) findViewById(R.id.curvint);
            EditText number7 = (EditText) findViewById(R.id.curvb);
            EditText number8 = (EditText) findViewById(R.id.ind);
            EditText number9 = (EditText) findViewById(R.id.espmin);
            TextView display = (TextView) findViewById(R.id.display);

            double dnp = Double.parseDouble(number1.getText().toString());
            double ponte = Double.parseDouble(number2.getText().toString());
            double aro = Double.parseDouble(number3.getText().toString());
            double ed = Double.parseDouble(number4.getText().toString());
            double esf = Double.parseDouble(number5.getText().toString());
            double curvint = Double.parseDouble(number6.getText().toString());
            double curvb = Double.parseDouble(number7.getText().toString());
            double ind = Double.parseDouble(number8.getText().toString());
            double espmin = Double.parseDouble(number9.getText().toString());

            double R1;
            double R2;
            double DT; //Decentração total
            double DM; //Decentração monocular
            double diametro;
            double S1;
            double S2;
            double espessurafinal;

            if (esf < 0)
            {

                R1 = (ind - 1 / curvb) * 1000;
                R2 = (ind - 1 / curvint) * 1000;
                DT = (aro+ponte)-dnp;
                DM = (DT / 2);
                diametro = (ed + 2 * DM) / 2;
                S1 = R1 - (Math.sqrt(Math.exp(R1)-Math.exp(diametro)));
                S2 = R2 - (Math.sqrt(Math.exp(R2)-Math.exp(diametro)));
                espessurafinal = (S1 - S2) + espmin;
                display.setText(espessurafinal + "" + "\nMilímetros");
            }

            else {

                R1 = (ind - 1 / curvb) * 1000;
                R2 = (ind - 1 / curvint) * 1000;
                DT = (aro+ponte)-dnp;
                DM = (DT / 2);
                diametro = (ed + 2 * DM) / 2;
                S1 = R1 - (Math.sqrt(Math.exp(R1)-Math.exp(diametro)));
                S2 = R2 - (Math.sqrt(Math.exp(R2)-Math.exp(diametro)));
                espessurafinal = espmin - (S1 + S2);
                display.setText(espessurafinal + "\nMilímetros");
            }
        }
    });

我可能在这里遗漏了一些非常微不足道的东西,我的编码技能是 非常有限,但是当我按下计算按钮时,这段代码片段 returns "Infinity"。现在,我之前收到 NaN 并设法摆脱它,但只看到它变成无穷大!我研究并发现这是由于 一些数字除以 0,但我没有看到... (哦,是的,我要确保输入的所有数字都不为 0)

可能只是我的编码把东西放在了错误的地方? (是的,我知道我可以通过使用函数和所有其他东西使代码变得更好......但我正在学习人,对我温柔点哈哈)。

或者,我的数学非常错误,返回的东西非常高?

先谢谢大家了!

似乎有些输入实际上不是数字,或者是数字和一些随机字符串的混合。通过检查输入是否为 Double 实例来对编辑文本值进行验证检查。 input instanceof Double

  if( input instanceof Double) {
    System.out.println("input is a Double");
  }

在检查实例之前,请确保输入是干净的,编辑文本上只有 numerals.Run 一个 java 正则表达式 ^[0-9]*$,如果为真,则只有数字输入,然后使用 Double.valueOf(val)Double.parse() 唯一的区别是后者 returns 类型为 Double 的对象,而另一个只有 returns 原始类型。