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.

57voto

jjnguy Punkte 132790

Math.ceil() rundet immer auf, auch wenn Sie eine ganzzahlige Division mit 3/2 . Da bei der ganzzahligen Division also 3/2 = 1 (nicht 1.5 ) die Obergrenze von 1 est 1 .

Um die gewünschten Ergebnisse zu erzielen, müssen Sie Folgendes tun Math.ceil(3/2.0);

Indem man die Division durch einen doppelten Betrag durchführt ( 2.0 ), führt man am Ende eine Gleitkommadivision statt einer Ganzzahldivision durch. Daher 3/2.0 = 1.5 und die ceil() de 1.5 ist immer 2 .

53voto

Tal Pressman Punkte 7113

Mit ein bisschen schwarzer Magie kann man das alles mit ganzen Zahlen machen:

// Divide x by n rounding up
int res = (x+n-1)/n

15voto

Randy Proctor Punkte 7048

Umwandlung von Bodeneinteilung in Deckeneinteilung:

(numerator + denominator-1) / denominator

So wandeln Sie die Bodenteilung in eine Rundungsdivision um:

(numerator + (denominator)/2) / denominator

12voto

PatrikAkerstrand Punkte 44499

Sie können immer zuerst werfen:

Math.ceil((double)3/2)

5voto

Michael Borgwardt Punkte 334642

In Java ist 3/2 = 1, weil es eine ganzzahlige Division verwendet. Es gibt keine Funktion, die dies nachträglich "reparieren" kann. Was Sie tun müssen, ist eine Float-Division zu erzwingen und das Ergebnis aufzurunden:

int result = (int)Math.ceil( ((float)3) / ((float)2) );

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