from math import ceil
def ceil_to_tens(x):
return int(ceil(x/10.0)) * 10
Edit: Dobra, teraz, że mam niezasłużoną „Nice odpowiedź” odznaki dla tej odpowiedzi, myślę, że zawdzięczam społeczność z właściwego rozwiązania z wykorzystaniem modułu decimal
że nie cierpią z tych problemów :) Dzięki Jeffowi za wskazanie tego. Więc rozwiązanie używając decimal
działa następująco:
from decimal import Decimal, ROUND_UP
def ceil_to_tens_decimal(x):
return (Decimal(x)/10).quantize(1, rounding=ROUND_UP) * 10
Oczywiście powyższy kod wymaga x
być liczbą całkowitą, łańcuch lub Decimal
obiektu - pływaki nie zadziała gdyż byłoby pokonać cały cel korzystania moduł decimal
.
Szkoda, że Decimal.quantize
nie działa poprawnie z liczbami większymi niż 1, to zapisałaby sztuczkę dzielenia-mnożenia.
Musisz tu być naprawdę ostrożny przy pomocy zmiennoprzecinkowego. Myślisz, że x wynosi 10.0, ale tak naprawdę to 10.000 ... 000132, a otrzymasz odpowiedź, której się nie spodziewasz. Lepiej być z arytmetyką o stałym punkcie lub dziesiętnym. –
Dzięki - Twoja uwaga wzbudziła moją ciekawość, dlatego przedłużyłam swoją odpowiedź wariantem wykorzystującym moduł "dziesiętny". –