我需要編寫一個Python腳本,它將基數10中的x轉換爲二進制數,並在小數點後最多包含n個值。我不能只使用bin(x)!下面是我有:將十進制轉換爲二進制的Python代碼
def decimal_to_binary(x, n):
x = float(x)
test_str = str(x)
dec_at = test_str.find('.')
#This section will work with numbers in front of the decimal
p=0
binary_equivalent = [0]
c=0
for m in range(0,100):
if 2**m <= int(test_str[0:dec_at]):
c += 1
else:
break
for i in range(c, -1, -1):
if 2**i + p <= (int(test_str[0:dec_at])):
binary_equivalent.append(1)
p = p + 2**i
else:
binary_equivalent.append(0)
binary_equivalent.append('.')
#This section will work with numbers after the decimal
q=0
for j in range(-1, -n-1, -1):
if 2**j + q <= (int(test_str[dec_at+1:])):
binary_equivalent.append(1)
q = q + 2**j
else:
binary_equivalent.append(0)
print float((''.join(map(str, binary_equivalent))))
所以說,你叫由decimal_to_binary功能(123.456,4)應該轉換123.456與小數點後4位,產生1111011.0111爲二進制。
第一部分是細 - 將採取的數字在小數點的前面,在這種情況下123,並且將其轉換爲二進制,輸出1111011
然而,第二部分,其之後的與值涉及十進制,不是在做我認爲應該做的事。它給出的輸出不是.0111,而是.1111
我用筆和紙運行代碼,記下每個變量的值,它應該可以工作。但事實並非如此。誰能幫我解決這個問題嗎?
我所說的功能decimal_to_binary(123.456,4),並打印出1111011.1111
哦,好痛心。這是一個很簡單的錯誤......非常感謝你! – dvanny