Seite 1 von 1

Aufrunden?

Verfasst: Montag 26. März 2007, 16:10
von DHK
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

Verfasst: Montag 26. März 2007, 16:20
von Zap
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.

Verfasst: Montag 26. März 2007, 16:28
von CM

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

Verfasst: Montag 26. März 2007, 16:35
von Rebecca

Code: Alles auswählen

>>> import math
>>> math.ceil(3.2)
4.0
>>> math.ceil(-3.7)
-3.0
(zum Abrunden gibts entprechend math.floor)

Verfasst: Montag 26. März 2007, 16:37
von CM
Ah, ja - das ist natürlich noch eleganter. Danke.

Verfasst: Montag 26. März 2007, 16:38
von rayo
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

Verfasst: Montag 26. März 2007, 16:41
von DHK
Hallo, vielen Dank für euere zahlreichen Tipps, sie haben mir sehr geholfen.

Gruß

DHK

Verfasst: Dienstag 27. März 2007, 12:21
von HarryH
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)

Verfasst: Dienstag 27. März 2007, 12:58
von BlackJack
Nicht wirklich:

Code: Alles auswählen

In [7]: zahl = 42.0

In [8]: print int(zahl) + 1
43

Verfasst: Dienstag 27. März 2007, 13:30
von HarryH
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)