浮动到整数舍入太早(?)

时间:2013-06-25 05:38:28

标签: java graphics rounding

我不完全确定标题是否准确,因为我不知道真正的问题。基本上,我正在尝试将燃料元素渲染到我的游戏中,但我希望它适合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);

当我开始游戏时,它看起来很好,但是一旦变量'fuel'减少,条形就会完全消失(很可能将其宽度设置为0)。

现在,我假设只要它被转换为整数,它就会简化为零,但我不知道如何解决这个问题。我无法在任何地方找到解决方案,我发现的类似问题已经通过正确完成我所做的事情得到了“解决”。任何和所有的帮助表示赞赏。这可能只是我非常无知的情况,但我希望不是。谢谢大家!

1 个答案:

答案 0 :(得分:2)

如果fuelmaxFuel都是整数,fuel / maxFuel的结果将是之前的整数,您尝试将其分配给fuelDisplay

因此,如果fuel == 99maxFuel == 100,整数除法的结果将为零,fuelDisplay也是如此,尽管它本身就是浮点数。

你可以通过为你的变量使用浮点数或者(可能更好)转换来确保结果是浮点来解决这个问题:

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