在 Java 中相同的 (int)doubles 向上和向下舍入

The same (int)doubles round up and down in Java

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

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

这是一款类似于 Minecraft 的 2D 游戏(我知道,我知道,这只是为了练习),我试图通过点击方块来摧毁它们,这很有效,但并不像预期的那样。

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

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

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

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

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

如果你想四舍五入你的值,你可以使用:

Math.round(2.7);

如果你想"round up",你可以使用:

Math.ceil(2.7);

如果你想"round down",你可以使用:

Math.floor(2.7);