Я пытаюсь преобразовать число с плавающей запятой в двоичное представление; как я могу этого добиться? Моя цель, однако, не ограничиваться 2 м, поэтому я надеюсь на что-то, что можно было бы легко расширить до любой базы (3, 4, 8) и т. Д.
У меня пока есть простая реализация для целых чисел :
import string
LETTER = '0123456789' + string.ascii_lowercase
def convert_int(num, base):
if base == 1:
print "WARNING! ASKING FOR BASE = 1"
return '1' * num if num != 0 else '0'
if base > 36: raise ValueError('base must be >= 1 and <= 36')
num, rest = divmod(num, base)
rest = [LETTER[rest]]
while num >= base:
num, r = divmod(num, base)
rest.append(LETTER[r])
rest.reverse()
return (LETTER[num] if num else '') + ''.join(str(x) for x in rest)
любая помощь приветствуется :)
редактировать:
def convert_float(num, base, digits=None):
num = float(num)
if digits is None: digits = 6
num = int(round(num * pow(base, digits)))
num = convert_int(num, base)
num = num[:-digits] + '.' + num[:digits]
if num.startswith('.'): num = '0' + num
return num
это верно? почему у меня такое поведение?
>>> convert_float(1289.2893, 16)
'509.5094a0'
>>> float.hex(1289.2983)
'0x1.42531758e2196p+10'
ps Как преобразовать число с плавающей запятой в двоичное?
Я читал это обсуждение, но не получил ответа .. Я имею в виду, это работает только для 0,25, 0,125? и я не понимаю фразу «должно быть в обратном порядке» ...