Java中使用相同的(int)向上和向下加倍

时间:2015-02-15 16:06:53

标签: java int double rounding mouselistener

我在java游戏中遇到了最棘手的问题。 :|

我可以绕过它,所以我可以在没有解决方案的情况下继续这个游戏,但我只是觉得它真的很奇怪。

它是2D Minecraft-ish(我知道,我知道,它只是为了练习)游戏,我试图通过点击它们来破坏块,这是有效的,但不是正如所料。

mX = (x * blockWidth - screenWidth * blockWidth / 2 + blockWidth / 2 + e.getX()) / blockWidth;
mY = y - screenHeight / 2 + .5 + e.getY() / blockHeight;

这两行应定义鼠标当前悬停的块的x和y坐标。填写相同的数字将得到相同的答案,因为第二个公式是第一个公式的较短版本。但是,第二个不起作用,单击上半部分中的一个块将导致打破它上面的块。我能想到的唯一原因是,在mouseClicked()方法中,(int)(这是必需的,因为你可以点击半坐标)将第一个向上舍入,第二个向下舍入,因为.5在里面。我不确定,这就是我问你的原因。 :)

有谁知道这可能是什么原因?我不喜欢使用上面的公式,因为我希望它更简单。

1 个答案:

答案 0 :(得分:2)

Java正在做一些隐藏的演员表。根据哪个变量是double或int,您可能会得到意外的结果,因为某些double值已经转换为int。我会确保你所有的变量都是双倍的。

另外,不要忘记浮点也有表示限制,这会影响计算和计算结果。

如果您要对值进行四舍五入,可以使用:

Math.round(2.7);

如果您想要"向上",您可以使用:

Math.ceil(2.7);

如果您想要"向下",您可以使用:

Math.floor(2.7);