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 
57     
58     else: #若十进制只有整数部分
59         l1 = [0,1]
60         l2 = []
61         while True:  
62            if n == 0: break
63            x,y = divmod(n, 2)  #x为商,y为余数 
64            l2.append(y)
65            n = x
66         string_number = ''.join([str(j) for j in l2[::-1]])  
67         return int(string_number)

晚安 

猜你喜欢

转载自www.cnblogs.com/m17773572025/p/9148489.html