2013-12-12 22 views
0

我正在爲我的遊戲設計響應式設計。我根據屏幕大小重新計算我的對象的位置。我正在做好計算,但我的功能給我錯誤的結果總是返回0. 我需要返回值是一個Int。不能做簡單的劃分

這裏的代碼:

public int rdnW(int a) 
{ 
    double b; 

    b = (a/800 * 100); 
    return (int)(b * Widths/100); 
} 

斷點我有看到,b爲總是= 0;在我的情況下,= 258感謝

+1

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+1

很難相信可能是幾十個問題的重複的帖子有6個答案,沒有一次近距離投票。 – devnull

回答

1

你應該投a加倍所以計算的結果將不要四捨五入。

b = ((double)a/800 * 100); 
+1

我認爲你的意思是「加倍加倍」,而不是「宣佈加倍加倍」 –

+0

@JohnSaunders對。 –

+0

謝謝,這是多麼的不利.. – Gabson

3

使用

b = ((double)a/800 * 100); 

這是因爲,因爲所有的因素都是整數表達式爲integer評估。對錶達式進行評估後,將其保存到double變量中。

您還可以使用類似於:

b = (a/800.0 * 100); 

b = (a/800 * 100.0); //in your case this will return zero because (a/800) will be evaluated as integer 

這是必要的因素至少有一個是雙「告訴」編譯器的表達有一個double類型

+0

我認爲最後一個將被評估爲'(a/800)* 100.0',它不能解決(全部)問題。 – delnan

+0

是的你是對的 –

7

您正在執行整數除法。鑄的一個值到doublefloat或指定的一個常量作爲雙:的即100.0代替100

b = (a/800.0 * 100.0); 
2

因爲你所做的是在這裏整數除法。如果ab是整數,並且a < b,a/b總是會給你0作爲結果,無論你分配它或轉換它的類型。

在你的事業中,a可能不到800,所以這就是爲什麼它給了0作爲結果。

.NET有3種類型的劃分。從7.7.2 Division operator

  • 整數除法
  • 浮點除法
  • 小數除法

整數除法一部分;

劃分舍入結果趨向於零,而 絕對值的結果是最大的可能整數小於所述兩個操作數的商數的 絕對值。

/ Operator (C# Reference)

當你把兩個整數,結果始終是整數。例如,對於 示例,7/3的結果爲2.要確定剩餘的7/ 3,請使用餘數運算符(%)。 要獲得一個商數作爲合理的 數字或分數,給予股息或除數類型浮動或類型 雙。

作爲一個解決方案,你可以投雙您a800等;

b = ((double)a/800 * 100); 

b = (a/800d * 100);