1 '''
2 二進制->十進制:bTod 3 整數部分:a乘以2的n次方(n:a后面的整數位數) 4 小數部分:a乘以2的-n次方(n:a是小數點后幾位) 5 十進制->二進制dTob 6 整數部分:短除法(除二取余法,逆序輸出) 7 小數部分:乘二取整法,0.……正向輸出所得 8
9 注意:函數中形參n為字符串類型,函數中首先判斷是否含小數點, 10 並將小數部分與整數部分分離,分開來算,最后再相加即為結果, 11 注意字符串與數字類型之間的轉換 12 '''
13 #二進制->十進制
14 def bTod(n, pre = 4): 15 s_int = n 16 s_float = ''
17 total_int, total_float = 0, 0 18
19 #將整數部分與小數部分分離並分別存在s_int,s_float字符串中
20 if '.' in n: 21 s_int, s_float = n.split('.') 22
23 #整數部分轉化為十進制,li為整數部分的長度,記錄到整數末尾的長度,結果記在total_int中
24 li = len(s_int) 25 for c in s_int: 26 li = li - 1
27 total_int = total_int + int(c)*pow(2,li) 28
29 #小數部分轉化為十進制,lf記錄距離小數點的位數,結果記在total_float中
30 lf = 0 31 for c in s_float: 32 lf = lf + 1
33 total_float = total_float +int(c)*pow(2,-lf) 34
35 #小數與整數相加,輸出結果,保留pre位小數
36 print("{}轉化為十進制是{:.{}f}".format(n,total_int + total_float, pre)) 37
38 #十進制->二進制
39 def dTob(n, pre = 4): 40 num_int = int(eval(n)) 41 num_float = eval(n) - num_int 42 t_int, t_float = '', ''
43
44 #將整數小數部分分離並分別存到字符串s_int,s_float中
45 if '.' in n: 46 s_int, s_float = n.split('.') 47
48 #除二取余,並將取得的余數存在t_int字符串中
49 while num_int!= 0: 50 a = num_int % 2
51 t_int = t_int + str(a) 52 num_int = num_int//2
53
54 #乘二取整,並將取得的整數存在t_float字符串中
55 while num_float != 0: 56 b = num_float*2
57 t_float = t_float + str(int(b)) 58 num_float = b - int(b) 59
60 #print(t_int[::-1] + '.' + t_float[:])
61 #將整數部分與小數部分用小數點相連,將整個的字符串轉化為數字,並保留pre位小數
62 print("{}轉化為二進制是{:.{}f}".format(n,eval(t_int[::-1] + '.' + t_float[:]), pre))
1 #測試代碼
2 a = input("請輸入0(轉化為十進制)或輸入1(轉化為二進制):") 3 if a == '0': 4 while True: 5 n = input("請輸入一個二進制數:") 6 flag = 1
7 for c in n: 8 if c != '1' and c != '0': 9 print("輸入錯誤,請重新輸入") 10 flag = 0 11 break
12 if flag: 13 break
14 pre = int(input("請輸入保留幾位小數:")) 15 bTod(n,pre) 16 elif a == '1': 17 while True: 18 n = input("請輸入一個十進制數:") 19 flag = 1
20 for c in n: 21 if c <= '0' or c >= '9': 22 print("輸入錯誤,請重新輸入") 23 flag = 0 24 break
25 if flag: 26 break
27 pre = int(input("請輸入保留幾位小數:")) 28 dTob(n,pre) 29 else: 30 print("無效輸入")
此博文為作者原創,轉載請注明來源~ https://www.cnblogs.com/zcl843264327/p/9348199.html