2014-03-25 54 views
2

在我的Xna遊戲中,我試圖讓我的playfield縮放到它正在運行的屏幕上。爲此,我使用比例來查找真實窗口相對於我的比賽場地縮放的百分比。爲此,我將實際寬度除以虛擬寬度:劃分兩個數字總是等於零?

float _percent = _realViewport.Width/this._viewport.Width; 

儘管如此,我在_percent變量中總是得到0。我在代碼中的那一行設置了一個調試停止點,並分析了這些變量。 this._viewport.Width等於640,_realViewport.Width等於1280.所以,使用我的計算器,640/1280應該等於0.5,但在我的代碼中,我總是得到0,而不是0.5。它爲什麼這樣做?

回答

6

因爲整數除法截斷(XNA's Viewport類型具有整數寬度和高度屬性),640/1280是0.5,截斷爲零。

投你的價值觀之一,如果你想浮點除法浮點數:

float _percent = _realViewport.Width/(float)this._viewport.Width; 
+0

沒錯。進行三角函數計算時,你會很多地使用這個技巧。 – user1306322

1

試試這個float _percent = _realViewport.Width * 1.0/ (float)this._viewport.Width;,由1.0增加乘法,整數將自動轉換爲浮動。

+1

這與之前發佈的答案基本相同,除了由於某種原因增加了乘以1.0的乘法因素,並且您沒有解釋任何信息 – user1306322

+0

@ user1306322,我修改了答案,這是怎麼回事? –

+0

它仍然基本上是一樣的東西,你正在做一個額外的操作,這是多餘的,因爲任何一個參數轉換爲浮動在這個操作就足夠了。你可以把'(float)'*或*乘以'1.0'到同樣的效果,前者我個人更喜歡,因爲代碼更明顯。 – user1306322