了解Java中的浮点。小数位

问题描述 投票:0回答:1

我在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一样。但是对于内部计算,使用了整个浮点值范围。

这是为什么,如何更改此值,以便仅舍入后的值可用于程序进行进一步的计算?

java android floating-point
1个回答
0
投票

如果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;
        }
© www.soinside.com 2019 - 2024. All rights reserved.