python十进制浮点数(小数)转换为二进制

最近学习计算机系统概论,经常需要将十进制的浮点数转换为二进制的形式,加之有相关作业,写个代码与大家分享。逻辑稍有混乱,不过还是很好用的

#传入一个浮点型字符串和有效数字位数
def fraction_to_binary(fraction_string, significant_binary_digits):
    def print_binary(number_string, fraction_length):
        dotleft=""

        netative="+"
        if float(number_string)<0:
            netative="-"
            

        if "." in number_string:
            a,b=number_string.split(".")
        else:
            a=number_string
        a=int(a)
        if a<0:
            a=-a
        result=[]
        def dec2bin(number):
            if number==1:
                result.insert(0,"1")
            elif number==0:
                result.insert(0,"0")
            else:
                if number%2==0:
                    result.insert(0,"0")
                    dec2bin(number//2)
                else:
                    result.insert(0,"1")
                    dec2bin(number//2)
        dec2bin(int(a))
        for i in result:
            dotleft+=i
        #print(dotleft)
        if "." in  number_string:

            number=float("0."+b)
            count=0
            dotright=""
            number=float("0."+b)
            while count<fraction_length:
                if number*2>=1:
                    dotright=dotright+"1"
                    number=number*2-1
                    count+=1
                else:
                    number*=2
                    dotright=dotright+"0"
                    count+=1
        else:
            dotright="0"*fraction_length
        temp=netative+dotleft+"."+dotright
        return temp[1:]
    
    answer=print_binary(fraction_string, 15)
    first_1=answer.index("1")
    liebiao=list(answer[answer.index(".")+1:first_1+significant_binary_digits+1])
    #print(liebiao)
    #打印列表
    for i in liebiao:
        print(i,end=" ")
    print()
    #列表打印完毕

    #处理进位
    woshigetemp=-1
    liebiao.insert(0,"0")
    if liebiao[-1]=="1":

        while 12138:
                if liebiao[woshigetemp]=="0":
                
                
                    liebiao[woshigetemp]="1"
                    break
                elif liebiao[woshigetemp]==".":
                    pass
                
                else:
                    liebiao[woshigetemp]="0"
                
                woshigetemp-=1
    #print(liebiao[:-1])
    ###

    ###打印
    print_str=""
    #liebiao=liebiao[:-1]
    liebiao=liebiao[:liebiao.index("1")+significant_binary_digits]
    #print(liebiao)
    liebiao.insert(1,".")
    for i in liebiao:
        print_str+=i
    
    print(print_str)
    

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值