Programa de Python para convertir flotante a binario

Python no proporciona ningún método incorporado para convertir fácilmente números decimales de coma flotante en números binarios. Entonces, hagamos esto manualmente. Enfoque: para convertir un número decimal de punto flotante en binario, primero convierta la parte entera en forma binaria y luego la parte fraccionaria en forma binaria y finalmente combine ambos resultados para obtener la respuesta final. Para la parte entera, sigue dividiendo el número por 2 y anotando el resto hasta que el dividendo sea menor que 2, a menos que sea así. De ser así, detente y copia todos los restos juntos. Para la parte decimal, sigue multiplicando la parte decimal por 2 hasta que quede 0 como parte fraccionaria. Después de multiplicar la primera vez, anota la parte entera y vuelve a multiplicar la parte decimal del nuevo valor por 2. Sigue haciendo esto hasta llegar a un número perfecto.  

Los pasos anteriores se pueden escribir como: 1 (base 10) = 1 (base 2) y .234 (base 10) = .0011 (base 2) Ahora, para obtener el binario de 1.234, combine ambos resultados como un número completo. (1)10 = (1)2 (.234)10 = (.0011)2 (1.234)10 = (1.0011…)2 (1.234)10 = (1.0011)2 [aprox.]

A continuación se muestra la implementación: 

Python3

# Python program to convert float
# decimal to binary number
 
# Function returns octal representation
def float_bin(number, places = 3):
 
    # split() separates whole number and decimal
    # part and stores it in two separate variables
    whole, dec = str(number).split(".")
 
    # Convert both whole number and decimal 
    # part from string type to integer type
    whole = int(whole)
    dec = int (dec)
 
    # Convert the whole number part to it's
    # respective binary form and remove the
    # "0b" from it.
    res = bin(whole).lstrip("0b") + "."
 
    # Iterate the number of times, we want
    # the number of decimal places to be
    for x in range(places):
 
        # Multiply the decimal value by 2
        # and separate the whole number part
        # and decimal part
        whole, dec = str((decimal_converter(dec)) * 2).split(".")
 
        # Convert the decimal part
        # to integer again
        dec = int(dec)
 
        # Keep adding the integer parts
        # receive to the result variable
        res += whole
 
    return res
 
# Function converts the value passed as
# parameter to it's decimal representation
def decimal_converter(num):
    while num > 1:
        num /= 10
    return num
 
# Driver Code
 
# Take the user input for
# the floating point number
n = input("Enter your floating point value : \n")
 
# Take user input for the number of
# decimal places user want result as
p = int(input("Enter the number of decimal places of the result : \n"))
 
print(float_bin(n, places = p))

Producción :

Enter your floating point value : 
1.234
Enter the number of decimal places of the result :
4

1.0011
Enter your floating point value : 
11.234
Enter the number of decimal places of the result : 
4

1011.0011

Complejidad de tiempo: O (logn)

Espacio auxiliar: O (1) si usamos stack o arrays, entonces se requerirá espacio O (logn) 

Publicación traducida automáticamente

Artículo escrito por retr0 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *