This concise article shows you 2 different ways to convert a float to binary in Python (both of these methods only use built-in features of Python and don’t require any third-party libraries).
Using the struct module
This approach is a two-step process:
- Pack the float as a binary string by using the
struct.pack()
function. - Use the format() function and list comprehension to convert each byte to binary, then join them together.
Code example:
import struct
# your float number
number = 2023.12345
# pack the float as a binary string
s = struct.pack('!f', number)
# convert each byte to binary and join them
b = ''.join(format(c, '08b') for c in s)
print(b)
Output:
01000100111111001110001111110011
If you have to complete this task many times in the future, you can define a function like this:
def float_to_binary(input: float) -> str:
return ''.join(format(c, '08b') for c in struct.pack('!f', input))
Using the decimal module
The steps are:
- Use the
decimal
module to convert your float to a decimal object with fixed precision. - Multiply the decimal object by a power of 2 to get an integer.
- Convert the result to binary by calling the
bin()
function.
Example:
from decimal import Decimal, getcontext
my_float = 2023.12345
# set the precision to 24 bits
getcontext().prec = 24
# convert the float to a decimal object
d = Decimal(my_float)
# multiply by 2^23 and convert to integer
i = int(d * (1 << 23))
# convert to binary
b = bin(i)
print(b)
Output:
0b1111110011100011111100110100110101
You can also define a function for reusability:
def float_to_binary(input: float) -> str:
getcontext().prec = 24
d = Decimal(input)
i = int(d * (1 << 23))
return bin(i)
This tutorial ends here. As said earlier, it is super concise. Happy coding & have a nice day!