2014-10-19 12 views
11

Se ottengo il numero 46 e voglio arrotondare al dieci più vicino. Come posso farlo in Python?Python - arrotondare fino al dieci più prossimo

46 va a 50.

+0

più vicina * dieci * ('10') o il più vicino * decimo * (' 0.1')? Che cosa hai provato e qual è esattamente il problema? – jonrsharpe

+1

cosa vuoi ottenere per '-46':' -50' o '-40'? – jfs

+0

Che tipo di numeri? 'int's? 'Float's? Istanze 'Decimale'? –

risposta

21

È possibile utilizzare math.ceil() per arrotondare, e quindi moltiplicare per 10

import math 

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

Per utilizzare solo fare

>>roundup(45) 
50 
+0

Che non funziona sempre: Se 'x = 1000000000000000010' quindi' print (int (math.ceil (x/10.0)) * 10) 'output' 1000000000000000000'. – user2219896

+0

Penso che sia perché stai andando oltre il limite int python – Parker

13

Ecco un modo per farlo:

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

Bel trucco. Si riduce all'aggiunta della base numerica meno 1. –

+0

questo fallirebbe per numeri come 0.5 o 30.5 e così via (es. K * 10 + a dove k è un numero intero e 0 epeleg

42

round vuole un parametro negativo ndigits!

>>> round(46,-1) 
50 

può risolvere il vostro caso.

+3

Questo non arrotonda * su * anche se. Restituisce anche un 'float', che può o non può essere desiderabile (ma penso che sia degno di nota). – NPE

+4

true, si arrotonda al più vicino ... su py3, restituisce un int però. – ch3ka

+0

Si può facilmente inserire in int() se non si desidera un float. Grazie. Questo ha risolto il mio caso. –

2

questo sarà arrotondato per difetto in modo corretto così:

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

Il requisito è in particolare per arrotondare * su *. – NPE

Problemi correlati