可能无法取消引用可能的精度损失/ [类型]

时间:2010-05-20 12:29:47

标签: java integer double

我一直在四处寻找,但我根本无法找到一个很好的解决方案......

Point mouse = MouseInfo.getPointerInfo().getLocation();

int dx = (BULLET_SPEED*Math.abs(x - mouse.getX()))/
                    (Math.abs(y - mouse.getY()) + Math.abs(x - mouse.getX()))*
                    (x - mouse.getX())/Math.abs(x - mouse.getX());

在这个星座中我得到:可能会丢失精度,当我将例如(x - mouse.getX())更改为(x - mouse.getX()).doubleValue()时,它表示double无法解除引用,当我在某处添加intValue()时,它表示int无法解除引用。我的错是什么?

[x,y是整数| BULLET_SPEED是static final int]

谢谢!

2 个答案:

答案 0 :(得分:3)

我将xyBULLET_SPEED存储为double,在double中执行所有算术,然后转换为int作为最后一步。

答案 1 :(得分:1)

使用(int)

进行投射
int i = (int) 3.14159; // compiles fine

这不会避免任何精度损失,但它使编译器明白它是你想要的,所以代码会编译。

请记住铸造位于优先位置。

int i = (int) .1D + .1D; // doesn't compile!!!
int j = (int) (.1D + .1D); // compiles fine

相关问题


取消引用错误

原语不是对象;他们没有会员。

    Integer ii = 42; // autoboxing
    int i = ii.intValue(); // compiles fine
    int j = i.intValue(); // doesn't compile

另见


因此,在这种特定情况下,您可以执行以下操作:

int dx = (int) (BULLET_SPEED*Math.abs(x - mouse.getX()))/
                (Math.abs(y - mouse.getY()) + Math.abs(x - mouse.getX()))*
                (x - mouse.getX())/Math.abs(x - mouse.getX());