ceil conterpart for Math.floorDiv in Java?

2020-08-26 11:16发布

问题:

Is there any ceil counterpart for Math.floorDiv()

How to calculate it fastest way with what we have?

UPDATE

The code for floorDiv() is follows:

 public static long floorDiv(long x, long y) {
        long r = x / y;
        // if the signs are different and modulo not zero, round down
        if ((x ^ y) < 0 && (r * y != x)) {
            r--;
        }
        return r;
    }

Can we code ceil the similar way?

UPDATE 2

I saw this answer https://stackoverflow.com/a/7446742/258483 but it seems to have too many unnecessary operations.

回答1:

There is none in the Math class, but you can easily calculate it

long ceilDiv(long x, long y){
    return -Math.floorDiv(-x,y);
}

For example, ceilDiv(1,2) = -floorDiv(-1,2) =-(-1)= 1 (correct answer).



回答2:

I'd also just use the negation of floorMod, but if you are going to define your own function, you could simply adapt the above code:

public static int ceilDiv(int x, int y) {
    int r = x / y;
    // if the signs are the same and modulo not zero, round up
    if ((x ^ y) >= 0 && (r * y != x)) r++;
    return r;
}


回答3:

You can make use of the floorDiv function and fiddle with that:

int ceilDiv(int x, int y) {
    return Math.floorDiv(x, y) + (x % y == 0 ? 0 : 1)
}


标签: java math java-8