2013-06-25 47 views
0

我不完全確定標題是否準確,因爲我不知道真正的問題。基本上,我正在嘗試在我的遊戲中渲染一個燃料元素,但我希望它適合98像素的容器。我已經做了如下:浮點到整數舍入太早(?)

float fuelDisplay = fuel/maxFuel; 
    float fuelDisplayFinal = fuelDisplay*98; 
    g.setColor(Color.YELLOW); 
    g.fillRect(15, 81, (int)fuelDisplayFinal, 38); 
    g.drawImage(Bank.bar, 0, 70, null); 

當我開始比賽,這看起來不錯,但只要變量「燃料」的減小,酒吧完全消失(最有可能有其寬度設定到0)。

現在,我假設只要將其轉換爲整數,它就會簡化爲零,但我不確定如何解決此問題。我無法在任何地方找到解決方案,而且我發現的類似問題已通過完成我所做的工作而「解決」了。任何和所有的幫助表示讚賞。這可能只是我非常無知的一種情況,但我希望不會。感謝大家!

+2

我的猜測是'fuel'和'maxFuel'都屬於'int'類型,這意味着除法是在整數運算中執行的。將其中的一個轉換爲「float」來強制執行浮點運算。 –

+0

'fuel'和'maxFuel'的數據類型是什麼? – NINCOMPOOP

回答

2

如果同時fuelmaxFuel是整數,你試試把它分配給fuelDisplay之前的fuel/maxFuel的結果將是一個整數。

因此,如果fuel == 99maxFuel == 100,整數除法的結果將爲零,並且fuelDisplay儘管本身是一個浮點數。

您可以通過使用float型的變量或(可能更好)鑄造,以確保結果解決這個問題是浮點:

float fuelDisplay = (float) fuel/maxFuel; 

或者,您也可以通過重新排列你的公式擺脫浮點完全的:

int fuelDisplayFinal = fuel * 98/maxFuel; 
g.setColor(Color.YELLOW); 
g.fillRect(15, 81, fuelDisplayFinal, 38); 
g.drawImage(Bank.bar, 0, 70, null); 

假設fuelDisplay僅用於本地這裏,你永遠需要fuelDisplayFinal浮點形式以後。

+0

非常感謝!我非常感謝你的回答。 – user2518712

+0

如果可以,可能要標記答案... – Lenymm