Gibt es eine eingebaute Funktion, die wie folgt abrunden kann?
10 -> 10
12 -> 10
13 -> 15
14 -> 15
16 -> 15
18 -> 20
Ich kenne keine Standardfunktion in Python, aber das funktioniert bei mir:
def myround(x, base=5):
return int(base * round(float(x)/base))
def myround(x, base=5):
return base * round(x/base)
Es ist leicht zu verstehen, warum das oben genannte funktioniert. Sie möchten sicherstellen, dass Ihre durch 5 geteilte Zahl eine ganze Zahl ist, die korrekt gerundet ist. Also machen wir zuerst genau das ( round(float(x)/5)
wo float
es nur in Python2 benötigt wird) und da wir dann durch 5 teilen, multiplizieren wir auch mit 5. Die endgültige Konvertierung in int
erfolgt, weil round()
in Python 2 ein Gleitkommawert zurückgegeben wird.
Ich habe die Funktion allgemeiner gestaltet, indem ich ihr einen base
Parameter mit dem Standardwert 5 gegeben habe.
x // base * base
floor()
undceil()
nicht zubase * floor(x/base)
math.floor
undmath.ceil
erlauben keine Verwendung mit einer benutzerdefinierten Basis, daher ist die Einstellung irrelevant.Zum Runden auf nicht ganzzahlige Werte wie 0,05:
Ich fand dies nützlich, da ich einfach in meinem Code suchen und ersetzen konnte, um "round (" in "myround (" zu ändern, ohne die Parameterwerte ändern zu müssen.
quelle
def my_round(x, prec=2, base=0.05): return (base * (np.array(x) / base).round()).round(prec)
Folgendes verwenden: Dies akzeptiert auch Numpy-Arrays.Es ist nur eine Frage der Skalierung
quelle
Das Entfernen des "Restes" würde funktionieren:
Wenn der Wert bereits eine Ganzzahl ist:
Als eine Funktion:
quelle
quelle
rund (x [, n]): Werte werden auf das nächste Vielfache von 10 zur Potenz minus n gerundet. Also wenn n negativ ist ...
Da 10 = 5 * 2 ist, können Sie die Ganzzahldivision und -multiplikation mit 2 anstelle der Gleitkommadivision und -multiplikation mit 5,0 verwenden. Nicht, dass das viel ausmacht, es sei denn, Sie mögen Bitverschiebungen
quelle
Entschuldigung, ich wollte die Antwort von Alok Singhai kommentieren, aber es lässt mich nicht, weil ich keinen guten Ruf habe = /
Wie auch immer, wir können noch einen Schritt verallgemeinern und gehen:
Dies ermöglicht es uns, nicht ganzzahlige Basen wie
.25
jede andere gebrochene Basis zu verwenden.quelle
Modifizierte Version von divround :-)
quelle
Verwenden:
Es verwendet keine Multiplikation und konvertiert nicht von / nach Floats.
Rundung auf das nächste Vielfache von 10:
Wie Sie sehen können, funktioniert es sowohl für negative als auch für positive Zahlen. Krawatten (zB -15 und 15) werden immer nach oben gerundet.
Ein ähnliches Beispiel, das auf das nächste Vielfache von 5 gerundet wird und zeigt, dass es sich auch für eine andere "Basis" wie erwartet verhält:
quelle
Falls jemand eine "finanzielle Rundung" benötigt (0,5 Runden immer auf):
Gemäß Dokumentation sind andere Rundungsoptionen:
Standardmäßig verwendet Python ROUND_HALF_EVEN, da es einige statistische Vorteile bietet (die gerundeten Ergebnisse sind nicht verzerrt).
quelle
Für ganze Zahlen und mit Python 3:
Produzieren:
quelle
Was ist damit:
quelle
Nächstes Vielfaches von 5
Bedenken Sie, dass 51 in 55 konvertiert werden muss:
quelle
Hier ist mein C-Code. Wenn ich es richtig verstehe, sollte es so etwas sein;
und dies rundet auch auf das nächste Vielfache von 5, anstatt nur aufzurunden;
quelle
Ein anderer Weg, dies zu tun (ohne explizite Multiplikations- oder Divisionsoperatoren):
quelle
Sie können
int()
zum Abrunden „tricksen“ , anstatt abzurunden, indem Sie0.5
die Zahl addieren, an die Sie übergebenint()
.quelle