我的 java 游戏遇到了最奇怪的问题。 :|
我可以绕过它,所以我将能够在没有解决方案的情况下继续玩这个游戏,但我只是觉得这真的很奇怪。
这是一款 2D Minecraft 风格的游戏(我知道,我知道,这只是为了练习)游戏,我试图通过单击 block 来摧毁它们,这是有效的,但没有达到预期。
mX = (x * blockWidth - screenWidth * blockWidth / 2 + blockWidth / 2 + e.getX()) / blockWidth;
mY = y - screenHeight / 2 + .5 + e.getY() / blockHeight;
这两行应该定义鼠标当前悬停在其上的 block 的 x 和 y 坐标。填写相同的数字将得到相同的答案,因为第二个公式是第一个公式的较短版本。然而,第二个不起作用,点击上半部分的方 block 将导致其上方的方 block 被破坏。我能想到的唯一原因是,在 mouseClicked() 方法中, (int) (这是必需的,因为您无法单击半坐标)将第一个向上舍入,将第二个向下舍入,因为 .5在里面。我不确定,所以我才来问你。 :)
有谁知道这可能是什么原因吗?我不想使用上面的公式,因为我希望它更简单。
最佳答案
Java 正在执行一些隐藏的转换。根据变量是 double 还是 int,您可能会得到意外的结果,因为某些 double 值已被转换为 int。我会确保你的所有变量都是 double 的。
此外,不要忘记浮点也有表示限制,这可能会影响计算和计算结果。
如果你想四舍五入你的值,你可以使用:
Math.round(2.7);
如果你想“四舍五入”,你可以使用:
Math.ceil(2.7);
如果你想“向下取整”,你可以使用:
Math.floor(2.7);
关于java - Java中相同的(int)double向上和向下取整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28528050/