我正在爲我的遊戲設計響應式設計。我根據屏幕大小重新計算我的對象的位置。我正在做好計算,但我的功能給我錯誤的結果總是返回0. 我需要返回值是一個Int。不能做簡單的劃分
這裏的代碼:
public int rdnW(int a)
{
double b;
b = (a/800 * 100);
return (int)(b * Widths/100);
}
斷點我有看到,b爲總是= 0;在我的情況下,= 258感謝
我正在爲我的遊戲設計響應式設計。我根據屏幕大小重新計算我的對象的位置。我正在做好計算,但我的功能給我錯誤的結果總是返回0. 我需要返回值是一個Int。不能做簡單的劃分
這裏的代碼:
public int rdnW(int a)
{
double b;
b = (a/800 * 100);
return (int)(b * Widths/100);
}
斷點我有看到,b爲總是= 0;在我的情況下,= 258感謝
你應該投a
加倍所以計算的結果將不要四捨五入。
b = ((double)a/800 * 100);
使用
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
類型
我認爲最後一個將被評估爲'(a/800)* 100.0',它不能解決(全部)問題。 – delnan
是的你是對的 –
您正在執行整數除法。鑄的一個值到double
或float
或指定的一個常量作爲雙:的即100.0代替100
例
b = (a/800.0 * 100.0);
因爲你所做的是在這裏整數除法。如果a
和b
是整數,並且a < b
,a/b
總是會給你0
作爲結果,無論你分配它或轉換它的類型。
在你的事業中,a
可能不到800
,所以這就是爲什麼它給了0
作爲結果。
.NET有3種類型的劃分。從7.7.2 Division operator
從整數除法一部分;
劃分舍入結果趨向於零,而 絕對值的結果是最大的可能整數小於所述兩個操作數的商數的 絕對值。
當你把兩個整數,結果始終是整數。例如,對於 示例,7/3的結果爲2.要確定剩餘的7/ 3,請使用餘數運算符(%)。 要獲得一個商數作爲合理的 數字或分數,給予股息或除數類型浮動或類型 雙。
作爲一個解決方案,你可以投雙您a
或800
等;
b = ((double)a/800 * 100);
或
b = (a/800d * 100);
我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
很難相信可能是幾十個問題的重複的帖子有6個答案,沒有一次近距離投票。 – devnull