java - Java中相同的(int)double向上和向下取整

标签 java int double rounding mouselistener

我的 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/

相关文章:

java - 无法从另一个 ASyncTask 调用 ASyncTask

java - Glassfish5 错误 : Exception in thread "main" java. lang.NullPointerException

c# - 将 int 转换为 boolean 值的更好方法

c++ - 以给定的年复利利率计算任何金额翻倍的时间

java - 我需要能够捕获小数点后仅 2 位数字的小数 java,尝试了这个

java - 当jTable行上的数字很大时,如何不显示E的幂?

java - 将值设置为枚举 - Java

java - GSON 序列化多态对象,类型存储在不同的对象中

c - 后缀为 'f' 的双常量用法