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