23 Stimmen

Gibt es eine Java-Funktion oder util-Klasse, die auf diese Weise rundet: func(3/2) = 2?

Gibt es eine Java-Funktion oder util class das die Rundung auf diese Weise vornimmt: func(3/2) = 2

Math.ceil() hilft nicht, was eigentlich der Fall sein sollte. Ich bin mir bewusst, dass BigDecimal aber sie brauchen es nicht.

1voto

Gil Vegliach Punkte 3472

Wenn du einfach durch 2 teilen willst, kannst du das tun:

n - n / 2

Und ganz allgemein:

(n - 1) / d + 1 == (n + d - 1) / d

Dies gilt für nichtnegative ganze Zahlen. Wie man es auf negative ganze Zahlen ausdehnt, hängt davon ab, was man mit "rundet auf diese Weise" meint. Die Division ganzer Zahlen wird gegen Null gerundet, während Math.ceil() rundet auf und Math.floor() Runden ab. Zum Beispiel n / 2 != (int) Math.floor(n / 2.0) para n == -5 .

Wenn Sie immer aufrunden wollen, können Sie Math.ceil() wie in diese Antwort .

1voto

Timothy Osborn Punkte 11

Wenn Sie die Verwendung von Ceiling und Casting wirklich vermeiden wollen, finden Sie hier eine kleine Methode, die das Gleiche bewirkt.

public int findCeil(int X, int Y) {
        if (X % Y == 0){
            return X / Y;
        } else {
            return X / Y + 1;
        }
    }

0voto

DaveFar Punkte 6589

Die Antwort von Randy Proctor gefällt mir am besten. Hier in mehr Details:

Wenn Sie reale Rundungen (z. B. 3/2 -> 2, aber 17 / 7 -> 2) mit ganzen Zahlen > 0 vornehmen wollen: verwenden Sie (dividend + (divisor / 2)) / divisor 代わりに dividend / divisor .

Wenn die Dividende eine beliebige ganze Zahl sein kann (d.h. negativ erlaubt): (dividend >= 0) ? ((dividend + divisor / 2) / divisor) : ((dividend - divisor / 2) / divisor) .

Wenn der Dividend eine beliebige ganze Zahl und der Divisor eine beliebige ganze Zahl außer 0 ist: (dividend >= 0) ? ((dividend + Math.abs(divisor) / 2) / divisor) : ((dividend - Math.abs(divisor) / 2) / divisor) .

(Beachten Sie, dass die Addition und Subtraktion einen Umbruch verursachen kann, der sonst nicht auftreten würde, wodurch das Ergebnis falsch wird).

0voto

pt123 Punkte 2116

Hier ist eine Methode, die ich erstellt habe, um Int-Divisionen zu behandeln, ohne Math Round und Casting in Float zu verwenden. Dies funktioniert für positive und negative Zahlen. Es funktioniert, indem die Hälfte des Nenners addiert wird, um die Abrundung auszugleichen

public static int div_Int(int num, int den){
    if(num > 0 && den > 0 || num < 0 && den < 0 ){
        return ((2*num)+ den)/(2*den);  
    }else{
        return ((2*num)- den)/(2*den);
    }

}

-4voto

Tony Miller Punkte 8899

Haben Sie versucht Math.floor() ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X