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.

4voto

sisve Punkte 19163

Ist dies nicht der übliche Fall einer ganzzahligen Division? Versuchen Sie Math.Ceil, nachdem Sie eine der beiden Zahlen in einen Fließkommatyp umgewandelt haben.

3voto

Samuel Carrijo Punkte 16743

Viele Sprachen "denken" auf diese Weise. Wenn man einen int durch einen int dividiert, dann sollte man einen int erhalten (also wird abgeschnitten und man erhält 1 als Ergebnis).

Wir alle wissen, dass das nicht stimmt, aber so funktionieren sie. Man kann sie "betrügen", indem man zum Beispiel einen von ihnen in einen Double umwandelt oder eine Double-Darstellung verwendet: Math.ceil (3.0 / 2) o Math.ceil((double)3/2) wie erwähnt.

2voto

Pesto Punkte 23518

Math.ceil se helfen, sofern Sie Fließkommazahlen verwenden. Das Problem ist, dass 3/2 bei der Ganzzahldivision 1 ist. Wenn der Wert die Funktion erreicht, sei es Math.ceil oder eine andere, ist der Wert einfach 1. Jeder nachgestellte Dezimalteil ist verschwunden.

1voto

Brian Punkte 2223
if (a % b == 0)
{
  return (a / b);
}
else
{
  return (a / b) + 1;
}

Nutzt die Ganzzahldivision aus, um das zu tun, was Sie wollen. Ich kenne keine mathematische Funktion, die das kann, aber warum nicht eine eigene entwickeln?

1voto

Marcus Junius Brutus Punkte 24334

Das folgende Fragment funktioniert auch mit negativen ganzen Zahlen:

public static int divRoundUp(int x, int n) {
    if (n<=0) throw new RuntimeException("conceived wt. pos. dividers (was:"+n+")");
    int ret = (x+(n-1)*(x>0?1:0))/n;
    return ret;
}

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