Skip to content

Instantly share code, notes, and snippets.

@fabidick22
Last active December 17, 2018 15:36
Show Gist options
  • Save fabidick22/7a63d97e10fca221ecbc9c2b0f56893a to your computer and use it in GitHub Desktop.
Save fabidick22/7a63d97e10fca221ecbc9c2b0f56893a to your computer and use it in GitHub Desktop.
entero, flotante mas cercano python, redondear a un numero primo.
"""
EJEMPLOS:
get_round(2.25)
Out[3]: 2.5
get_round(2.30)
Out[4]: 2.5
get_round(2.55)
Out[5]: 3.0
"""
def get_round(valor, prime_of=50):
"""
Funcion para redondear a un numero flotante a un numero primo mas cercano.
D.A. Redondeando el un numero flotante a valores primos mas cercanos.
Si sucede algun error, retorna el valor minimo establecido
"""
str_total = str(valor).split(".")
valor_primo_de = 0 if not prime_of else prime_of
# trabajar con dos numeros
if len(str_total[1]) == 1:
str_total[1] = str('{:<02d}'.format(int(str_total[1])))
redondear_decimal = intround(int(str_total[1]))
if redondear_decimal == 0:
return str_total[0]
else:
sum_decimal = 0
for valorDecimal in range(redondear_decimal, 101):
if valorDecimal % valor_primo_de == 0:
# convertir a float
valorDecimal = str(valorDecimal)
if len(valorDecimal) >= 3:
sum_decimal = 1
else:
sum_decimal = float("." + valorDecimal)
break
res = float(int(str_total[0]) + sum_decimal)
return res
def intround(n, p=2):
"""
Funcion para redondear un entero.
D.A. Sirve para redondear un enteros a la cantiada de numeros especificada, por defecto: 2 (ejemplo: 2493 -> 25)
:param n: Numero a redondear
:param p: Cantidad de numero que desea, por defecto 2.
:return: Retorna un entero del numero redondeado.
"""
if p == 0 or n == 0:
return n
if p > 0:
ln = len(str(n))
p = p-ln+1 if n<0 else p-ln
return int(str((n + 5 * 10**(-p-1)) // 10**-p * 10**-p)[:2])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment