python十進制和二進制的轉換 (含浮點數)


現在是凌晨1點56  今天6月7號 高考

我終於寫完了 , 十進制轉二進制的小數部分卡了我將近一個小時

上代碼 

 1 #-*- coding: utf-8
 2 from decimal import Decimal  3 def bTod(n, pre=4):  4     '''
 5  把一個帶小數的二進制數n轉換成十進制  6  小數點后面保留pre位小數  7     '''
 8     string_number1 = str(n) #number1 表示二進制數,number2表示十進制數
 9     decimal = 0  #小數部分化成二進制后的值
10     flag = False 11     for i in string_number1: #判斷是否含小數部分
12         if i == '.': 13             flag = True 14             break
15     if flag: #若二進制數含有小數部分
16         string_integer, string_decimal = string_number1.split('.') #分離整數部分和小數部分
17         for i in range(len(string_decimal)): 18             decimal += 2**(-i-1)*int(string_decimal[i])  #小數部分化成二進制
19         number2 = int(str(int(string_integer, 2))) + decimal 20         return round(number2, pre) 21     else: #若二進制數只有整數部分
22         return int(string_number1, 2)#若只有整數部分 直接一行代碼二進制轉十進制 python還是騷 
23 
24 def dTob(n, pre=4): 25     '''
26  把一個帶小數的十進制數n轉換成二進制 27  小數點后面保留pre位小數 28     '''
29     string_number1 = str(n) #number1 表示十進制數,number2表示二進制數
30     flag = False 31     for i in string_number1: #判斷是否含小數部分
32         if i == '.': 33             flag = True 34             break
35     if flag: 36         string_integer, string_decimal = string_number1.split('.') #分離整數部分和小數部分
37         integer = int(string_integer) 38         decimal = Decimal(str(n)) - integer 39         l1 = [0,1] 40         l2 = [] 41         decimal_convert = ""
42         while True: 43            if integer == 0: break
44            x,y = divmod(integer, 2)  #x為商,y為余數 
45  l2.append(y) 46            integer = x 47         string_integer = ''.join([str(j) for j in l2[::-1]])  #整數部分轉換成二進制 
48         i = 0 49         while decimal != 0 and i < pre: 50             result = int(decimal * 2) 51             decimal = decimal * 2 - result 52             decimal_convert = decimal_convert + str(result) 53             i = i + 1  
54         string_number2 = string_integer + '.' + decimal_convert 55         return float(string_number2) 56     else: #若十進制只有整數部分
57         l1 = [0,1] 58         l2 = [] 59         while True: 60            if n == 0: break
61            x,y = divmod(n, 2)  #x為商,y為余數 
62  l2.append(y) 63            n = x 64         string_number = ''.join([str(j) for j in l2[::-1]]) 65         return int(string_number)

 

晚安 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM