2016-12-01 44 views
1

我真搞不清楚爲什麼會這樣,我的代碼:Math.Sqrt(2/3)返回0

double x = Math.Sqrt(2/3); 
MessageBox.Show(x.ToString()); 

顯示0 答案是

0.8164,我知道我也會必須使用Math.Round來完成這一點,但目前的問題是我越來越0

+2

'2/3'是一個整數除法並返回'0'。你想要使用浮點數 – UnholySheep

+1

爲什麼這被低估?這個問題寫得很好,記錄了預期的和實際的行爲。 – Bathsheba

+1

@Bathsheba - 因爲它沒有顯示任何研究工作。即使試圖診斷問題,也會顯示產生問題的代碼部分是分割而不是平方根操作。 – Sayse

回答

10

該問題是由數字的自動整數評估引起的。用途:

double x = Math.Sqrt(2f/3f); 
MessageBox.Show(x.ToString()); 
+0

如果我使用0.667而不是它的工作分數,那麼f在你的答案中是什麼意思? – JohnChris

+5

這意味着將數字視爲浮點數。 – Emad

2

2/3是整數運算,你想要的是2.0/3這意味着我要使用浮點數。

你認爲Intereger與你從數學中知道的不同。在編程語言中,它意味着int操作的結果本身就是一個整數。

在你的例子中2/3是一個整數運算,這意味着結果向下舍入到最接近的整數,即零。爲避免出現這種情況,至少應該將其中一個操作數作爲某個浮點值進行處理,或者使用2.02f(或者3.03f)。