from math import ceil
def ceil_to_tens(x):
return int(ceil(x/10.0)) * 10
Editar: bien, ahora que tengo una insignia inmerecida "Nice respuesta" a esta respuesta, creo que le debe a la comunidad con una solución adecuada mediante el módulo decimal
que no sufre de estos problemas :) Gracias a Jeff por señalar esto. Por lo tanto, una solución utilizando decimal
funciona del siguiente modo:
from decimal import Decimal, ROUND_UP
def ceil_to_tens_decimal(x):
return (Decimal(x)/10).quantize(1, rounding=ROUND_UP) * 10
Por supuesto, el código anterior requiere x
a ser un número entero, una cadena o un objeto Decimal
- flotadores no funcionarán, ya que ello derrotar todo el propósito de utilizar el módulo decimal
.
Es una pena que Decimal.quantize
no funcione correctamente con números mayores que 1, habría guardado el truco de multiplicación de división.
Debe tener mucho cuidado con el punto flotante aquí. Crees que x es 10.0, pero en realidad es 10.000 ... 000132 y obtienes una respuesta que no esperas. Puede que estés mejor con aritmética de punto fijo o decimal. –
Gracias - tu comentario despertó mi curiosidad, así que extendí mi respuesta con una variante que usa el módulo 'decimal'. –