0

所以在我的应用程序中有这部分使用二次公式来解决总和。但我得到一个奇怪的输出。这就是我得到的,而不是实际的答案,“NaN 或 NaN”

此代码在单击按钮时执行。

h1 = Double.parseDouble(a);
h2 = Double.parseDouble(b);
h3 = Double.parseDouble(c);


                sq2 = (h1 * h1 - 4* 0.5 *h3*h1);
                sq = (h1 * h1 - 4* 0.5 *h3*h1);

                fin = h1 + (Math.sqrt(sq2))/(2* 0.5 * h3); 
                fin2 = (h1 - (Math.sqrt(sq)))/(2* 0.5 * h3); 

                AlertDialog.Builder ans4 = new AlertDialog.Builder(Eq2.this);
                ans4.setTitle("ANSWER");
                ans4.setMessage(fin + " or " + fin2);
                ans4.setPositiveButton("OKAY!", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                        // TODO Auto-generated method stub
                        e4.setText(fin + "or" + fin2); 
                    }
                });
                ans4.show();
4

2 回答 2

3

NaN:'不是数字'。换句话说,它大便了!

Math.sqrt()您的代码中的原因几乎可以肯定是取负值的平方根 ( )。

如果您正在尝试这样做,那么要么

  1. 你的公式是错误的。

  2. 你的公式需要有条件的保护

  3. 或者您需要使用复数。

于 2013-07-28T14:10:58.750 回答
1

当您Math.sqrt对得到的负数NaN(不是数字)执行操作时,请检查您的数学。

使用Math.abs之前Math.sqrt应该会给你一个数字(它使你的输入变为Math.sqrt正数),但可能不是正确的数字;

fin = h1 + (Math.sqrt(Math.abs(sq2))/(2* 0.5 * h3); 
fin2 = (h1 - (Math.sqrt(Math.abs(sq))))/(2* 0.5 * h3); 
于 2013-07-28T14:10:38.077 回答