2017-05-14 45 views
2

我失去了我想了一些東西明顯。或者在我的腦海裏有一些愚蠢的錯誤,但無論如何我無法弄清楚。簡單的數學出了錯

我的代碼是這樣的。

for (int i = 0; i < ringNumber; i++) 
{ 
    float x = (radius * ringNumber) - (i * radius); 
    float y = (-1/2 * radius * ringNumber) - (i * 1/2 * radius); 
    Debug.Log ("Radius: " + radius + ", Ringnumber : " + ringNumber + ", i : " + i); 
    Debug.Log ("In Loop 3 Vertical : " + x + " " + y); 
} 

什麼,我得到的是

enter image description here

對於Radius = 2Ringnumber = 2Y被賦予了爲0兩次。在我看來,它應該是-2和-3。爲什麼不是?

我在其他洛斯類似的這樣的錯誤,但有些工作只是罰款。
它沒有那麼難的數學我認爲-2 * 2/2減零時間的東西。應該是-2還是不?

+5

標準錯誤,總1/2 0產生,需要1/2F得到一個浮點除法。 –

+0

或者使用'radius/2'或者使用'0.5 * radius'。 – LutzL

回答

4

這是點:

1.0/2.0 = 0.5和1/2 = 0

當除以整數值的結果將是一個整數太。所以1/2將舍入爲零。 使用1.0/2.0

for (int i = 0; i < ringNumber; i++) 
{ 
     float x = (radius * ringNumber) - (i * radius); 
     float y = (-1.0/2.0 * radius * ringNumber) - (i * 1.0/2.0 * radius); 
     Debug.Log ("Radius: " + radius + ", Ringnumber : " + ringNumber + ", i : " + i); 
     Debug.Log ("In Loop 3 Vertical : " + x + " " + y); 
} 

最佳做法是始終使用數值,像這樣:#.0這避免這樣的錯誤。你也可以試試這個選擇。 more suffix

1d/2d = 0.5

這樣你明確地說,這些價值觀是雙和不是整數。所以產生的價值也會增加一倍。

+0

你也應該解釋爲什麼 – Nkosi

+0

是的,就像我發佈它一樣,我看到我使用的每一個1/2都出錯了。 0.5f工作。你知道這是爲什麼嗎? – Soronume

+0

@Soronume我更新了我的答案。 –