(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 ......循环不会工作,对象只是继续移动。 如何修复它以便循环可以使用任何数字?
答案 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");
}