前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python十进制和二进制的转换 (含浮点数)

python十进制和二进制的转换 (含浮点数)

作者头像
喜欢ctrl的cxk
发布2022-05-07 14:33:38
1.1K1
发布2022-05-07 14:33:38
举报
文章被收录于专栏:Don的成长史Don的成长史

 Python中 浮点数之间的十进制和二进制的转换 

代码语言:javascript
复制
#-*- coding: utf-8
from decimal import Decimal
def bTod(n, pre=4):
    '''
    把一个带小数的二进制数n转换成十进制
    小数点后面保留pre位小数
    '''
    string_number1 = str(n) #number1 表示二进制数,number2表示十进制数
    decimal = 0  #小数部分化成二进制后的值
    flag = False   
    for i in string_number1: #判断是否含小数部分
        if i == '.':
            flag = True
            break
    if flag: #若二进制数含有小数部分
        string_integer, string_decimal = string_number1.split('.') #分离整数部分和小数部分
        for i in range(len(string_decimal)):
            decimal += 2**(-i-1)*int(string_decimal[i])  #小数部分化成二进制
        number2 = int(str(int(string_integer, 2))) + decimal
        return round(number2, pre)
    else: #若二进制数只有整数部分
        return int(string_number1, 2)#若只有整数部分 直接一行代码二进制转十进制 python还是骚 

def dTob(n, pre=4):
    '''
    把十进制的浮点数n转换成二进制
    小数点后面保留pre位小数
    '''
    string_number1 = str(n) #number1 表示十进制数,number2表示二进制数
    flag = False   
    for i in string_number1: #判断是否含小数部分
        if i == '.':
            flag = True
            break
    if flag:
        string_integer, string_decimal = string_number1.split('.') #分离整数部分和小数部分
        integer = int(string_integer)
        decimal = Decimal(str(n)) - integer
        l1 = [0,1]
        l2 = []
        decimal_convert = ""
        while True:  
           if integer == 0: break
           x,y = divmod(integer, 2)  #x为商,y为余数 
           l2.append(y)
           integer = x
        string_integer = ''.join([str(j) for j in l2[::-1]])  #整数部分转换成二进制 
        i = 0  
        while decimal != 0 and i < pre:  
            result = int(decimal * 2)  
            decimal = decimal * 2 - result  
            decimal_convert = decimal_convert + str(result)  
            i = i + 1  
        string_number2 = string_integer + '.' + decimal_convert
        return float(string_number2)

    
    else: #若十进制只有整数部分
        l1 = [0,1]
        l2 = []
        while True:  
           if n == 0: break
           x,y = divmod(n, 2)  #x为商,y为余数 
           l2.append(y)
           n = x
        string_number = ''.join([str(j) for j in l2[::-1]])  
        return int(string_number)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档