Ich habe es versucht round(number) aber es rundet die Zahl ab. Beispiel:
round(2.3) = 2.0
und nicht 3, wie ich möchte.
Das habe ich versucht int(number + .5) aber es rundet die Zahl wieder ab! Beispiel:
int(2.3 + .5) = 2
round(number + .5) funktioniert nicht, wenn die Zahl ganzzahlig ist. round(3+.5) == 4wenn Sie wirklich wollen 3.
– Nearoo
27. Januar 2019 um 16:47 Uhr
Steve Tjoa
Das math.decke (Ceiling)-Funktion gibt die kleinste Ganzzahl zurück, die größer oder gleich ist x.
Für Python3:
import math
print(math.ceil(4.2))
Für Python2:
import math
print(int(math.ceil(4.2)))
Erläuterung: math.ceil gibt die kleinste ganze Zahl zurück, die größer oder gleich dem Eingabewert ist. Diese Funktion behandelt die Eingabe als Gleitkommazahl (Python hat keine stark typisierten Variablen) und die Funktion gibt eine Gleitkommazahl zurück. Wenn Sie ein Int wollen, können Sie aus dem Rückgabewert ein Int konstruieren, dh int(math.ceil(363))
– RW Sinnet
26. August 2015 um 23:37 Uhr
@Sinnet: Eigentlich könnte man sagen, dass Python stark typisiert ist stackoverflow.com/a/11328980/5069869
– Bernhard
8. Januar 2016 um 12:54 Uhr
@TheEspinosa: Ja, Python ist es definitiv stark eingegeben, es ist nur so, dass viele Funktionen Fragen zum Typ einiger Parameter stellen und je nach Antwort unterschiedlichen Code ausführen.
– Quamrana
17. Dezember 2017 um 12:27 Uhr
@RWSinnet In Python 3, math.ceil gibt ein tatsächliches ganzzahliges Objekt zurück, nicht nur ein schwebendes Objekt mit einem ganzzahligen Wert.
– Arthur Tacca
2. Mai 2018 um 15:50 Uhr
Achten Sie auf die Schwimmerpräzision, wegen 10000000 * 0.00136 = 13600.000000000002 ceil kann stark ansteigen math.ceil(10000000 * 0.00136) = 13601.0
– von der Straße
10. September 2019 um 8:23 Uhr
Benutzer3074620
Ich weiß, dass diese Antwort für eine Frage von einer Weile her ist, aber wenn Sie keine Mathematik importieren und nur aufrunden möchten, funktioniert dies für mich.
Der erste Teil wird zu 4 und der zweite Teil wird zu “True” ausgewertet, wenn es einen Rest gibt, der zusätzlich True = 1 ist; Falsch = 0. Wenn also kein Rest vorhanden ist, bleibt es dieselbe ganze Zahl, aber wenn es einen Rest gibt, wird 1 hinzugefügt.
Nett. Sie können auch verwenden // für ganzzahlige Division, so wird dies 21 // 5 + (21 % 5 > 0).
– nichts101
19. August 2015 um 13:04 Uhr
…und um es als nette Funktion zu haben: def round_up(number): return int(number) + (number % 1 > 0)
– Bitstrom
13. Oktober 2021 um 8:39 Uhr
TrophyGeek
Interessantes Python 2.x-Problem, das Sie im Hinterkopf behalten sollten:
>>> import math
>>> math.ceil(4500/1000)
4.0
>>> math.ceil(4500/1000.0)
5.0
Das Problem ist, dass das Teilen von zwei Ints in Python ein weiteres Int erzeugt, das vor dem Ceiling-Aufruf abgeschnitten wird. Sie müssen einen Wert zu einem Float (oder Cast) machen, um ein korrektes Ergebnis zu erhalten.
In Javascript erzeugt der exakt gleiche Code ein anderes Ergebnis:
console.log(Math.ceil(4500/1000));
5
Im Python 2.x : int/int –> int und int/float –> float In Python 3.x : int/int kann zu einem Float führen
– Gecko
31. Oktober 2011 um 6:46 Uhr
Sie können das Verhalten von Python 3.x auf bestimmten Versionen von Python 2.x abrufen, indem Sie „true division“ wie hier gezeigt aktivieren
– Rob Dennis
22. Oktober 2013 um 17:54 Uhr
Wenn Sie mit ganzen Zahlen arbeiten, besteht eine Möglichkeit zum Aufrunden darin, die Tatsache auszunutzen, dass // Abrunden: Dividieren Sie einfach die negative Zahl und verneinen Sie dann die Antwort. Kein Import, Fließkomma oder Bedingung erforderlich.
rounded_up = -(-numerator // denominator)
Zum Beispiel:
>>> print(-(-101 // 5))
21
Lisa
Das könnte dir auch gefallen:
>>> import numpy as np
>>> np.ceil(2.3)
3.0
Ich sage nicht, dass es besser als Mathematik ist, aber wenn Sie numpy bereits für andere Zwecke verwendet haben, können Sie Ihren Code konsistent halten.
Wie auch immer, nur ein Detail, auf das ich gestoßen bin. Ich benutze numpy viel und war überrascht, dass es nicht erwähnt wurde, aber natürlich funktioniert die akzeptierte Antwort einwandfrei.
Die Verwendung von numpy ist auch nett. Am einfachsten wäre es mit Mathematik, da es bereits Teil von Python-Bibliotheken ist. Es macht mehr Sinn. Wenn Sie stattdessen, wie Sie bereits erwähnt haben, viel numpy für andere Probleme verwenden, ist es sinnvoll und konsequent, numpy.ceil zu verwenden 🙂 Guter Hinweis!
– Marco SMD
4. April 2017 um 8:52 Uhr
Wenn Sie Pandas verwenden und das gesamte Modul als pd importiert haben, verwenden Sie einfach pd.np.ceil(2.3). Kein separater numpy-Import erforderlich.
Die Verwendung von numpy ist auch nett. Am einfachsten wäre es mit Mathematik, da es bereits Teil von Python-Bibliotheken ist. Es macht mehr Sinn. Wenn Sie stattdessen, wie Sie bereits erwähnt haben, viel numpy für andere Probleme verwenden, ist es sinnvoll und konsequent, numpy.ceil zu verwenden 🙂 Guter Hinweis!
– Marco SMD
4. April 2017 um 8:52 Uhr
Wenn Sie Pandas verwenden und das gesamte Modul als pd importiert haben, verwenden Sie einfach pd.np.ceil(2.3). Kein separater numpy-Import erforderlich.
– Professor Stachelschwein
11. Dezember 2021 um 12:37 Uhr
Andreas Schuh
Ich bin überrascht, dass niemand vorgeschlagen hat
(numerator + denominator - 1) // denominator
für ganzzahlige Division mit Aufrundung. Früher der übliche Weg für C/C++/CUDA (vgl. divup)
Nur für statisch typisierte Sprachen relevant. Wenn der Nenner ein Float ist, sind Sie tot.
– Barel
6. Juli 2017 um 12:31 Uhr
Auch das funktioniert nur konsequent, wenn der Nenner positiv ist; Wenn der Nenner negativ ist, müssen Sie addieren 1 Anstatt es zu subtrahieren, oder vertauschen Sie die Vorzeichen von Zähler und Nenner, bevor Sie die Mathematik durchführen.
– ShadowRanger
7. August 2019 um 16:28 Uhr
@Bharel offensichtlich nicht wahr. Python hat Typen und Sie können es sogar auf einen Wert überprüfen. Dieser Code funktioniert gut für int. Dies ist auch erwähnenswert, dass dieser Code sogar für ganze Zahlen größer als 2^53 funktioniert, in welchem Fall die Gleitkomma-Arithmetik möglicherweise kein korrektes Ergebnis liefert.
– Nolan
23. Januar 2021 um 10:48 Uhr
11318400cookie-checkWie rundet man eine Zahl auf?yes
round(number + .5)
funktioniert nicht, wenn die Zahl ganzzahlig ist.round(3+.5) == 4
wenn Sie wirklich wollen3
.– Nearoo
27. Januar 2019 um 16:47 Uhr