python

Python: convertir decimal con parte fraccionaria a binario, octal y hexadecimal

En este post de programación en Python te mostraré cómo convertir un número decimal en base 10 con parte fraccionaria a cualquier otra base; para el ejemplo te mostraré cómo convertir a la base 2 (binario), base 8 (octal) y base 16 (hexadecimal).

La diferencia con otros posts que te he mostrado es que ahora vamos a soportar números con punto decimal, parte fraccionaria o como le llames, y no solo números enteros.

Por ejemplo, podremos convertir el número decimal 3722.24 a E8A.3D70 en hexadecimal, usando Python.

Explicación del algoritmo

Debemos separar la parte entera y decimal, algo que podemos hacer con modf en Python. Luego debemos seguir el procedimiento que hacemos manualmente:

En el caso de la parte entera vamos dividiéndola entre la base y usando el residuo para saber cuál digito irá en el resultado.

Para la parte decimal o fraccionaria, vamos a ir multiplicando el valor decimal por la base, usar la parte entera del resultado como dígito para el resultado, y asignando la parte decimal a la parte fraccionaria original.

Todo esto que te explico está mejor explicado en el post del mismo tema pero en lenguaje C; te invito a darle un vistazo.

Código de la función

He encerrado el comportamiento de la conversión en una función de Python. Esto nos va a servir para convertir cualquier decimal con punto decimal a binario, octal y hexadecimal.

Ya te lo dije varias veces pero te lo repito: gracias a esto podremos convertir también la parte fraccionaria. Aquí el código:

See the gist on github.

Los comentarios explican el funcionamiento del método, pero básicamente recibe el número decimal que vamos a convertir, la base a la que vamos a convertir (por ejemplo, 2 para binario, 16 para hexadecimal, etcétera) y los dígitos que componen a la base.

Modo de uso

Ahora te mostraré cómo usarla. Voy a convertir el mismo número a las 3 bases más usadas, aunque teóricamente se podría convertir a cualquier base.

See the gist on github.

Poniendo todo junto

Python – Convertir número con punto decimal a binario, octal, hexadecimal y cualquier base

El código completo queda así, siéntete libre de modificarlo o mejorarlo. Recuerda que los datos de entrada pueden venir de cualquier lugar, aquí los estoy definiendo dentro del código por simplicidad.

See the gist on github.

Si quieres puedes probarlo en este enlace, o leer más sobre Python en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

  • El código funciona muy bien y tiene la ventaja de servir para cualquier base.
    PERO tiene un error en la linea 34, en vez de comparar con el sobrante (parte entera del resultado de parte_fraccionaria*base), debería verificar cuando la parte fraccionaria sea 0.
    Porque de hecho en el ejemplo que esta usando 4722.24, no muestra nada de la parte fraccionaria en binario, porque apenas se encuentra un cero ya se detiene.
    Solo habria que cambiar el if sobrante == 0 por el if parte_partefraccionario ==0.

    PERO esto da un problema de que en algunos numeros puede ser infinito el patron de la parte fraccionaria, por eso deberia ponerse un limite.

    puede ser añadirle una variable "precision" asi:
    if parte_fraccionaria == 0 or i >= precision:

    En conclusión quedaría algo como esto:

    sobrante = None
    i = 1
    precision = 10
    # Un do while
    while True:
    resultado = parte_fraccionaria*base
    parte_fraccionaria, sobrante = modf(resultado)
    digito = digitos[int(sobrante)]
    cadena_parte_fraccionaria += digito
    if parte_fraccionaria == 0 or i >= precision:
    break
    i += 1
    return cadena_parte_entera + "." + cadena_parte_fraccionaria

    Resultado:
    El decimal 4722.24 es 1001001110010.0011110101 en binario, 11162.1727024365 en octal y 1272.3D70A3D70A en hexadecimal

Entradas recientes

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

3 días hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

4 días hace

PHP: incrustar imagen en base64

El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…

4 días hace

Plugin ESC POS – Actualización 3.4.0: imprimir HTML

El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…

5 días hace

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

2 semanas hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

2 semanas hace

Esta web usa cookies.