Aufrunden?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
DHK
User
Beiträge: 26
Registriert: Sonntag 18. März 2007, 14:55
Wohnort: Bayern

Hallo,
gibt es eine Möglichkeit, eine Fließkommazahl immer aufzurunden? Wenn ich korrekt runden würde, müsste ich ja 0,67 auf 0,7 aufrunden und 0,42 auf 0,4 abrunden. Ich möchte aber, dass immer aufgerundet wird, sprich 0,67 -> 0,7 und 0,42 -> 0,5.
Ich habe mir schon mal die Funktion round() angesehen, aber das ist afaik nicht das, was ich suche.

Achja, und gibt es eine Möglichkeit, immer auf ganze Zahlen zu runden (0,5 -> 1; 2,67778 -> 3)?

Gruß

DHK
Opera ist noch immer der beste...
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hi du, ich hab wahrscheinlich nicht die eleganteste Lösung für dich parat.
Aber ich hab mir an der Stelle als ich es brauchte eben so geholfen.

Code: Alles auswählen

>>> x = 2.1
>>> round(x+0.49)
3.0
>>> x = 2.0
>>> round(x+0.49)
2.0
>>> x = 2.9
>>> round(x+0.49)
3.0
Aber mich würde an der Stelle auch interessieren wie man das am besten macht. (bzw am elegantesten) ;)

Gruß Zap

EDIT: Habe gerade gesehen das ich dir damit bei der ersten Problemstellung nicht helfen kann, sorry.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Code: Alles auswählen

 >>> x = 0.42
>>> x
0.41999999999999998
>>> round(x+0.5)
1.0
Dann abschließende Konvertierung mit int, denn:

Code: Alles auswählen

>>> int(x+0.5)
0
>>> #aber
...
>>> int(round(x+0.5))
1
und last not least das decimal-Modul

Code: Alles auswählen

>>> from decimal import Decimal, ROUND_UP
>>> Decimal('0.42').quantize(Decimal('1.'), rounding=ROUND_UP)
Decimal("1")
Habe ich was vergessen?

Gruss,
Christian
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Code: Alles auswählen

>>> import math
>>> math.ceil(3.2)
4.0
>>> math.ceil(-3.7)
-3.0
(zum Abrunden gibts entprechend math.floor)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ah, ja - das ist natürlich noch eleganter. Danke.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

So kannst du beliebig Aufrunden:

Code: Alles auswählen

def aufrunder(zahl, schritt_weite):
    return math.ceil(zahl/schritt_weite)*schritt_weite

print aufrunder(0.67, 0.1)
print aufrunder(0.42, 0.1)
Auch auf 0.5 oder 0.2 genau Runden geht auch, einfach schrittweite ändern

Gruss
Benutzeravatar
DHK
User
Beiträge: 26
Registriert: Sonntag 18. März 2007, 14:55
Wohnort: Bayern

Hallo, vielen Dank für euere zahlreichen Tipps, sie haben mir sehr geholfen.

Gruß

DHK
Opera ist noch immer der beste...
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Hallo,

Für Zahlen größer 0 geht:

Code: Alles auswählen

zahl = 3.23
print int(zahl) + 1
Für Zahlen kleiner 0 geht:

Code: Alles auswählen

zahl = -3.23
print int(zahl)
Gruß, Harry
BlackJack

Nicht wirklich:

Code: Alles auswählen

In [7]: zahl = 42.0

In [8]: print int(zahl) + 1
43
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Oh :oops:
Da habe ich meine Lösung nicht wirklich durchdacht. Sorry!

So müßte es nun gehen:

Code: Alles auswählen

def aufrunden(zahl):
    result = int(zahl)
    if result != zahl and zahl > 0:
        result += 1
    return result

print aufrunden(3.23)
Gruß, Harry
Antworten