Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created May 27, 2021
Embed
What would you like to do?
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
decimal = 3722.24
en_binario = decimal_a_cualquier_base(decimal, 2, "01")
en_octal = decimal_a_cualquier_base(decimal, 8, "01234567")
en_hexadecimal = decimal_a_cualquier_base(decimal, 16, "0123456789ABCDEF")
print(f"El decimal {decimal} es {en_binario} en binario, {en_octal} en octal y {en_hexadecimal} en hexadecimal")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment