from math import ceil
def ceil_to_tens(x):
return int(ceil(x/10.0)) * 10
Edit: va bene, ora che ho un distintivo immeritata "bella risposta" per questa risposta, penso che deve la comunità con una soluzione adeguata utilizzando il modulo decimal
che non soffre di questi problemi :) Grazie a Jeff per averlo indicato. Quindi, una soluzione che utilizza decimal
funziona come segue:
from decimal import Decimal, ROUND_UP
def ceil_to_tens_decimal(x):
return (Decimal(x)/10).quantize(1, rounding=ROUND_UP) * 10
Naturalmente il codice di cui sopra richiede x
ad essere un numero intero, una stringa o un oggetto Decimal
- carri non funziona come che sconfiggere l'intero scopo di utilizzare il modulo decimal
.
È un peccato che Decimal.quantize
non funzioni correttamente con i numeri più grandi di 1, sarebbe stato salvato il trucco di divisione-moltiplicazione.
fonte
2010-10-21 11:41:04
È necessario essere molto attenti con virgola mobile qui. Pensi che x sia 10.0, ma in realtà è 10.000 ... 000132 e ottieni una risposta che non ti aspetti. Potresti stare meglio con l'aritmetica fissa o decimale. –
Grazie - il tuo commento ha suscitato la mia curiosità, quindi ho esteso la mia risposta con una variante che utilizza il modulo 'decimale'. –