Wie rundet man eine Zahl auf?

Lesezeit: 5 Minuten

Benutzer-Avatar
bodacydo

Wie rundet man eine Zahl in Python auf?

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


Benutzer-Avatar
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

Benutzer-Avatar
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.

>>> int(21 / 5)
4
>>> int(21 / 5) + (21 % 5 > 0)
5

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


Benutzer-Avatar
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

Benutzer-Avatar
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.

    – Professor Stachelschwein

    11. Dezember 2021 um 12:37 Uhr

Benutzer-Avatar
Aminah Nuraini

Verwenden math.ceil aufrunden:

>>> import math
>>> math.ceil(5.4)
6.0

HINWEIS: Die Eingabe sollte Float sein.

Wenn Sie eine ganze Zahl brauchen, rufen Sie an int um es umzuwandeln:

>>> int(math.ceil(5.4))
6

Übrigens, verwenden math.floor abzurunden Nieder und round um auf die nächste ganze Zahl zu runden.

>>> math.floor(4.4), math.floor(4.5), math.floor(5.4), math.floor(5.5)
(4.0, 4.0, 5.0, 5.0)
>>> round(4.4), round(4.5), round(5.4), round(5.5)
(4.0, 5.0, 5.0, 6.0)
>>> math.ceil(4.4), math.ceil(4.5), math.ceil(5.4), math.ceil(5.5)
(5.0, 5.0, 6.0, 6.0)

  • 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

Benutzer-Avatar
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


1131840cookie-checkWie rundet man eine Zahl auf?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy