Python 含小數的十、二進制相互轉換


 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


免責聲明!

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



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