WIE MAN DAS ERGEBNIS DER GANZZAHLIGEN DIVISION IN C# AUFRUNDEN KANN
Mich interessierte, wie man dies in C# am besten macht, da ich dies in einer Schleife fast 100.000 Mal machen muss. Lösungen, die von anderen mit Math gepostet wurden, stehen oben in den Antworten, aber bei Tests habe ich festgestellt, dass sie langsam sind. Jarod Elliott schlug eine bessere Taktik vor, indem er überprüfte, ob der Modulo etwas produziert.
int result = (int1 / int2);
if (int1 % int2 != 0) { result++; }
Ich habe dies in einer Schleife 1 Million Mal ausgeführt und es hat 8ms gedauert. Hier ist der Code mit Math:
int result = (int)Math.Ceiling((double)int1 / (double)int2);
Was in meinem Test mit 14ms auffiel, deutlich länger.
Hinweis: Die erste Methode kann bei der Arbeit mit negativen Zahlen versagen.
1 Stimmen
Fehlt mir etwas? y/x + 1 funktioniert gut (vorausgesetzt, Sie wissen, dass der /-Operator immer abrundet).
69 Stimmen
@ rikkit - wenn y und x gleich sind, ist y/x + 1 auch eins zu hoch.
1 Stimmen
Für alle, die dies gerade erst entdecken, antwortet diese Antwort auf eine doppelte Frage überflüssige Konvertierungen in doppelte und vermeidet Überlaufprobleme, zusätzlich zu einer klaren Erklärung.
3 Stimmen
@IanNelson allgemeiner, wenn
x
durchy
teilbar ist, wärey/x + 1
auch eine zu hohe Zahl.1 Stimmen
@ZX9 Nein, es vermeidet keine Überlaufprobleme. Es handelt sich genau um dieselbe Lösung, die Ian Nelson hier gepostet hat.