我在Java中发现了一个奇怪的小问题,我很难解释。
这里是代码的相关部分。
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
posX = round(event.getX(), 2);
posY = round(event.getY(), 2);
xPercent = (posX - centerX)/radius;
yPercent = (posY - centerY)/radius;
break;
}
舍入posX和posY值的函数如下:
public static float round(float value, int scale) {
int pow = 10;
for (int i = 1; i < scale; i++) {
pow *= 10;
}
float tmp = value * pow;
float tmpSub = tmp - (int) tmp;
return ( (float) ( (int) (
value >= 0
? (tmpSub >= 0.5f ? tmp + 1 : tmp)
: (tmpSub >= -0.5f ? tmp : tmp - 1)
) ) ) / pow;
}
现在该函数将posX(409.09)和posY(360.22)的值四舍五入到小数点后2位。但是对于xPercent(0.51595557)和yPercent(0.51595557)计算,代码使用整个7个小数位。就像posX和posY的值刚刚更改为posX和posY一样。但是对于内部计算,使用了整个浮点值范围。
这是为什么,如何更改此值,以便仅舍入后的值可用于程序进行进一步的计算?
如果xPercent和yPercent是浮点数,则可以使用round函数:
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
posX = round(event.getX(), 2);
posY = round(event.getY(), 2);
xPercent = round((posX - centerX)/radius, 2);
yPercent = round((posY - centerY)/radius, 2);
break;
}