2014-10-19 13 views
11

Jeśli zdobędę numer 46 i chcę zaokrąglić do najbliższej dziesiątki. Jak mogę to zrobić w pythonie?Python - zaokrąglić do najbliższej dziesiątki

46 idzie do 50.

+0

Najbliżej * dziesięć * ("10") lub najbliższa * dziesiąta * ("0,1")? Co próbowaliście i jaki jest dokładnie problem? – jonrsharpe

+1

co chcesz zdobyć dla '-46':' -50' lub '-40'? – jfs

+0

Jakiego rodzaju numery? 'int's? 'float's? Instancje "dziesiętne"? –

Odpowiedz

21

Można użyć math.ceil() zaokrąglić w górę, a następnie pomnożyć przez 10

import math 

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

Aby użyć tylko zrobić

>>roundup(45) 
50 
+0

To nie działa zawsze: Jeśli 'x = 1000000000000000010' to' print (int (math.ceil (x/10.0)) * 10) 'wyjścia' 1000000000000000000'. – user2219896

+0

Myślę, że to dlatego, że przechodzisz obok limitu python int – Parker

13

Oto jeden ze sposobów, aby to zrobić:

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

Dobra sztuczka. Sprowadza się do dodawania bazy liczb minus 1, –

+0

, co może się nie udać dla liczb takich jak 0,5 lub 30,5 itd. (Tj. K * 10 + a gdzie k jest liczbą całkowitą i 0 epeleg

42

round bierze negatywny ndigits parametr!

>>> round(46,-1) 
50 

może rozwiązać twoją sprawę.

+3

To nie zaokrągla * w górę * chociaż. Zwraca również wartość 'float', która może być pożądana lub nie (ale myślę, że warto o tym wspomnieć). – NPE

+4

prawda, zaokrągla do najbliższego ... na py3, ale zwraca int. – ch3ka

+0

Możesz z łatwością umieścić go wewnątrz int(), jeśli nie chcesz pływaka. Dzięki. To rozwiązało moją sprawę. –

2

To zaokrąglić w dół prawidłowo, a także:

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

Wymóg jest specjalnie do round * up *. – NPE

Powiązane problemy