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