zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    CCPC-Wannafly Winter Camp Day8 (Div2, onsite)
    Codeforces gym101612 E.Equal Numbers(贪心)
    Codeforces gym101612 L.Little Difference(枚举+二分)
    Linq-ToList与ToArray
    SQL SERVER性能分析
    无法访问IIS 没有足够的特权访问计算机
    SQL SERVER获得指定表的主键
    SQL Server 中master..spt_values的应用
    买了阿里云之后:挂载新硬盘
    支付宝WAP支付接口开发
  • 原文地址:https://www.cnblogs.com/zcl843264327/p/9348199.html
Copyright © 2011-2022 走看看