Auf nächste 10ner-Stelle 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
max2331
User
Beiträge: 13
Registriert: Montag 11. April 2011, 09:53

Hallo ich bin hier neu,

ich habe ein Array in dem Höhendaten enthalten sind. Nun möchte ich die Auflösung gröber machen, sprich, die Höhe 1435,12m soll auf 1440m gerundet werden, oder 1354,21m zu 1350m. Mit der Funktion round() bekomme ach alles hinter dem Komma gerundet, aber wie bekomme ich es nun hin das er mir alles auf die nächste 10ner Stelle rundet.

Danke schon einmal für die Hilfe

Max
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Sieh dir mal den zweiten Parameter für round an.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Hallo 'hier neu',

ein kleiner Denkanstoß:

Code: Alles auswählen

In [1]: 1435/100*100
Out[1]: 1400

In [2]:
max2331
User
Beiträge: 13
Registriert: Montag 11. April 2011, 09:53

Ok danke dann werde ich das mal machen.
Vielleicht finde ich was.
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Oh, stimmt, das ist natürlich besser.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Je nach Geschmack kann man auch mit Modulo arbeiten.

Code: Alles auswählen

>>> 1234/100*100
1200
>>> 1234 - 1234%100
1200
Dann ist man auch bei Floats auf der sicheren Seite.

Code: Alles auswählen

>>> 1234.0/100*100
1234.0
>>> 1234.0 - 1234.0%100
1200.0
Es ist sogar einen Tick schneller:

Code: Alles auswählen

>>> min(timeit.repeat('1234/100*100', repeat=100))
0.23580193519592285
>>> min(timeit.repeat('1234 - 1234%100', repeat=100))
0.10858011245727539
Eine Warnung noch: Die hier genannten Tricks runden alle immer ab. Wenn du natürlich runden willst (ab 0.5 aufrunden), dann musst du schon round() nehmen. Xynon1 hat ja schon auf den zweiten Parameter hingewiesen:

Code: Alles auswählen

>>> round(1358, -1)
1360.0
>>> round(1358, -2)
1400.0
>>> round(1358, -3)
1000.0
Bottle: Micro Web Framework + Development Blog
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

Hi,
hab mir mal selber für ein ähnliches Problem folgendes geschrieben:

Code: Alles auswählen

def round_sig(x, n):
    """Returns x rounded to n significant figures."""
    return round(x, int(n - math.ceil(math.log10(abs(x)))))

def get_sig(x):
    """Return postion of significant figure"""
    i = 0
    if x <= 1:
        while (10**i) * x < 1:
            i += 1
    else:
        while (10**(-i+1))* x > 1:
            i += 1
    return i
Das ganze ist gedacht für folgendes:
1234,123m +- 11m
-> Signifikante des Fehlers hohlen und dann auf die Signifikante des eigentlichen Wertes runden sodass am Ende raus kommt:
1230m+-10m
Antworten