循环不使用浮点数?

时间:2014-11-04 18:08:43

标签: java android libgdx

(libGDX,Java)我试图让一个物体从屏幕的一侧移动到另一侧,当它到达另一侧时,它重新开始。 我用于操作的代码:

if (position.x < 300) {
position.x -= 1;
}
if (position.x == -70) {
position.x = 131;
}

位置是Vector2。 1是物体的移动速度和我遇到问题的地方。如果position.x - = A WHOLE NUMBER,循环工作正常,但如果我想要它是0.3f,1.5f ......循环不会工作,对象只是继续移动。 如何修复它以便循环可以使用任何数字?

2 个答案:

答案 0 :(得分:3)

这是因为浮点数的二进制表示。每个整数(不是太大)都有自己的表示形式作为二进制数。但是0.3并没有准确的表示。

http://effbot.org/pyfaq/why-are-floating-point-calculations-so-inaccurate.htm

比较花车时使用:

bool equal(float actual, float expected) {
  return (abs(actual - expected) < 0.000001);
}

答案 1 :(得分:1)

您可以使用Float.floatToIntBits()。

Float.floatToIntBits(position.x) == Float.floatToIntBits(-70)

这是另一个例子:

Float fObj1 = new Float("5.35");
Float fObj2 = new Float("5.34");

int i2 = fObj1.compareTo(fObj2);

if(i2 > 0){
  System.out.println("First is grater");
}else if(i2 < 0){
  System.out.println("Second is grater");
}else{
  System.out.println("Both are equal");
}