Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created May 27, 2021 15:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/5a8fc2a33f08bed7a8319fe944c5a01e to your computer and use it in GitHub Desktop.
Save parzibyte/5a8fc2a33f08bed7a8319fe944c5a01e to your computer and use it in GitHub Desktop.
import math
"""
Convertir el decimal con parte fraccionaria a cualquier base
decimal: el número decimal que se desea convertir. Por ejemplo, 12.34
base: la base a la que se desea convertir, si es binario es 2, octal 8, hexadecimal 16
digitos: los dígitos que componen a la base. Si es binario es "01", si es octal es "01234567", etcétera
https://parzibyte.me/blog
"""
def decimal_a_cualquier_base(decimal, base, digitos):
parte_fraccionaria, parte_entera = math.modf(decimal)
parte_entera = int(parte_entera)
cadena_parte_entera = ""
cadena_parte_fraccionaria = ""
while parte_entera > 0:
residuo = parte_entera % base
digito = digitos[int(residuo)]
cadena_parte_entera += digito
parte_entera = int(parte_entera/base)
# Invertir cadena de parte entera
# https://parzibyte.me/blog/2019/06/26/invertir-cadena-python/
cadena_parte_entera = cadena_parte_entera[::-1]
sobrante = None
# Un do while
# https://parzibyte.me/blog/2020/04/08/do-while-python/
while True:
resultado = parte_fraccionaria*base
parte_fraccionaria, sobrante = math.modf(resultado)
digito = digitos[int(sobrante)]
cadena_parte_fraccionaria += digito
if sobrante == 0:
break
return cadena_parte_entera + "." + cadena_parte_fraccionaria
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment