2014-10-19 6 views
11

Wenn ich die Nummer 46 bekomme und ich auf die nächsten zehn runden möchte. Wie kann ich das in Python machen?Python - bis auf die nächsten zehn Runden

46 geht bis 50.

+0

Nächster * zehn * ('10') oder nächste * zehnte * (' 0.1')? Was hast du probiert und was genau ist das Problem damit? – jonrsharpe

+1

was willst du für '-46':' -50' oder '-40' bekommen? – jfs

+0

Welche Art von Nummern? 'Int's? 'Float's? 'Dezimale' Instanzen? –

Antwort

21

Sie können math.ceil() verwenden abzurunden, und dann multiplizieren mit 10

import math 

def roundup(x): 
    return int(math.ceil(x/10.0)) * 10 

Um nur tun

>>roundup(45) 
50 
+0

Das funktioniert nicht immer: Wenn 'x = 1000000000000000010' dann' print (int (math.ceil (x/10.0)) * 10) 'gibt' 1000000000000000000' aus. – user2219896

+0

Ich denke, das liegt daran, dass Sie das Python-Int-Limit überschreiten – Parker

13

Hier ist eine Möglichkeit, es zu tun ist:

>>> n = 46 
>>> (n + 9) // 10 * 10 
50 
+2

Netter Trick. Richtet sich auf das Hinzufügen der Zahlenbasis minus 1 aus. –

+0

dies würde für Zahlen wie 0,5 oder 30,5 usw. fehlschlagen (dh k * 10 + a, wobei k eine ganze Zahl ist und 0 epeleg

42

round nimmt negativ ndigits Parameter!

>>> round(46,-1) 
50 

kann Ihren Fall lösen.

+3

Dies wird nicht abgerundet * obwohl. Es gibt auch einen "float" zurück, der vielleicht wünschenswert ist (aber ich denke, es ist erwähnenswert). – NPE

+4

wahr, es rundet auf den nächsten ... auf py3, gibt es aber ein Int. – ch3ka

+0

Sie können es einfach in int() setzen, wenn Sie keinen Float möchten. Vielen Dank. Das hat meinen Fall gelöst. –

2

verwenden korrekt als auch Das wird abrunden:

>>> n = 46 
>>> rem = n % 10 
>>> if rem < 5: 
...  n = int(n/10) * 10 
... else: 
...  n = int((n + 10)/10) * 10 
... 
>>> 50 
+3

Die Anforderung ist speziell zu runden * up *. – NPE