Seite 1 von 1

Auf hunderter, tausender, ... runden

Verfasst: Donnerstag 3. März 2005, 17:34
von mawe
Hi!

Gibts einen einfachen Weg so etwas zu machen:

Code: Alles auswählen

>>> round_it(756)
800
>>> round_it(345)
300
Ich hab mir gerade eine Funktion geschrieben, die das kann, aber die is über 10 Zeilen lang (und ich schäme mich dafür :oops:). Muss doch kürzer gehen. Oder gibts da schon etwas eingebautes?

Gruß, mawe

Re: Auf hunderter, tausender, ... runden

Verfasst: Donnerstag 3. März 2005, 17:41
von jens
Kann man das nicht irgendwie mit %d machen??? Also auf zwei Nachkommastellen runden geht mit %.2d

Verfasst: Donnerstag 3. März 2005, 17:45
von mawe
Hi jens!

Das mit den Nachkommastellen kenn ich, man kann auch mit "%03i" Nullen vor die Zahl stellen, aber dahinter..., und gerundet... ?

Gruß, mawe

Verfasst: Donnerstag 3. März 2005, 18:27
von Leonidas
Wie kommst du auf 10 Zeilen?

Code: Alles auswählen

def round_it(num):
    l = len(str(num)) - 1
    rounded = round(num / 10.0 ** l)
    rounded = int(rounded * 10 ** l)
    return rounded
Könnte man sicher noch kürzer fassen (eine Zeile!), wäre aber nicht mehr lesbar ;)

Edit: Okay, ich konnte es nicht lassen noch eine absolut unlesbere Einzeilerlösung zu machen:

Code: Alles auswählen

round_it = lambda num: int(round(num / 10.0 ** (len(str(num)) - 1)) * 10 ** (len(str(num)) - 1))
Kinder, nicht nachmachen oder versuchen es zu verstehen! Habe ich aus dem Vierzeiler per Copy and Paste erstellt.

Verfasst: Donnerstag 3. März 2005, 19:51
von mawe
Hi Leonidas!

Wie ich auf 10 Zeilen komme? Nachdem ich Deine Lösung gesehen habe, möchte ich darüber lieber den Mantel des Schweigens legen :oops:

Vielen Dank!

Gruß, mawe