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)