2013-07-28 26 views
0

所以在我的應用程序中有這部分使用二次公式來解決總和。但我得到一個奇怪的輸出。這是我所得到的,而不是實際的答案,「NaN或NaN」奇怪的Math.sqrt輸出()在android

此代碼在單擊按鈕上執行。

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(); 

回答

1

當您在負數執行Math.sqrtNaN(非數字),檢查你的數學。

使用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); 
3

NaN:'不是數字'。換句話說,它便便了!

你的代碼中的原因幾乎肯定是取一個負值的平方根(Math.sqrt())。

如果你正在嘗試的是,那麼無論

  1. 您的公式是錯誤的。

  2. 公式需要有條件的後衛

  3. ,或者你需要使用複數。

+0

檢查'h1> = 2 * h3'。如果不是,你得到一個負數。 (無論如何,h2是什麼?) – usr2564301