Я использовал следующий код, чтобы извлечь мантиссу из числа с плавающей запятой.
Код: Выделить всё
#where v is a float
import struct
import math
packed_bytes=struct.pact('d',v)
unpacked_int=struct.unpack('>Q',packed_bytes)[0]
mantissa_int = unpacked_int & 0xFFFFFFFFFFFFF
mantissa_want = str(bin(mantissa_int))[2:]
, я получаю
Код: Выделить всё
110100010100100001011100110011001100110011001100110Код: Выделить всё
v=-738593.45
v_hex=v.hex()
if v_hex[0] =="-":
s_sign="-"
else:
s_sign="+"
#print("s_sign="+s_sign)
# Split the number into integer and fractional parts
integer_part = int(v)
#print("integer_part="+str(integer_part))
fractional_part = abs(v - integer_part)
#converting the integer into a binary
if s_sign=="-":
binary_integer=bin(integer_part)[3:]
if s_sign=="+":
binary_integer=bin(integer_part)[2:]
if abs(v)=1:
binary_fraction+="1"
fractional_part-=1
else:
binary_fraction+='0'
if fractional_part==0:
break
binary_comb=binary_integer+"."+binary_fraction
print(binary_comb)
Код: Выделить всё
10110100010100100001.01110011001100110011001100110011значение, полученное путем упаковки байтов:
Код: Выделить всё
110100010100100001011100110011001100110011001100110Код: Выделить всё
10110100010100100001.01110011001100110011001100110011Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-python
Мобильная версия