现在是凌晨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)
晚安