所以在我的应用程序中,有一部分使用二次公式来求解和。但我得到一个奇怪的输出。这是我得到的而不是实际的答案,“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();
答案 0 :(得分:3)
NaN
:'不是数字'。换句话说,它是大便!
您的代码中的原因几乎肯定是取负值的平方根(Math.sqrt()
)。
如果您正在尝试,那么
你的公式错了。
您的公式需要有条件的警卫
或者您需要使用复数。
答案 1 :(得分: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);