Seite 1 von 1

Auf nächste 10ner-Stelle aufrunden

Verfasst: Montag 11. April 2011, 09:58
von max2331
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

Re: Auf nächste 10ner-Stelle aufrunden

Verfasst: Montag 11. April 2011, 10:01
von Xynon1
Sieh dir mal den zweiten Parameter für round an.

Re: Auf nächste 10ner-Stelle aufrunden

Verfasst: Montag 11. April 2011, 10:03
von .robert
Hallo 'hier neu',

ein kleiner Denkanstoß:

Code: Alles auswählen

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

In [2]:

Re: Auf nächste 10ner-Stelle aufrunden

Verfasst: Montag 11. April 2011, 10:03
von max2331
Ok danke dann werde ich das mal machen.
Vielleicht finde ich was.

Re: Auf nächste 10ner-Stelle aufrunden

Verfasst: Montag 11. April 2011, 10:04
von .robert
Oh, stimmt, das ist natürlich besser.

Re: Auf nächste 10ner-Stelle aufrunden

Verfasst: Montag 11. April 2011, 10:19
von Defnull
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

Re: Auf nächste 10ner-Stelle aufrunden

Verfasst: Montag 11. April 2011, 21:59
von p90
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