学无先后,达者为师

网站首页 Python教程 正文

python实现浮点数二进制与十进制之间的转换

作者:小朱小朱绝不服输 更新时间: 2021-12-05 Python教程

浮点数二进制与十进制之间的转换

在使用遗传算法的时候,需要对数据进制二进制编码,所以改的这个浮点数不同进制之间转换的一个代码
直接上代码

#二进制转化为十进制浮点数
def todecimal(n):
    '''
        把一个带小数的二进制数n转换成十进制
        小数点后面保留pre位小数
        '''
      # number1 表示二进制数,number2表示十进制数
    string_number1=str(n)
    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, 4)
    else:  # 若二进制数只有整数部分
        return int(string_number1, 2)  # 若只有整数部分


#转化为二进制
def tobinarystring(num):
    if num == int(num):
        # 若为整数
        integer = '{:08b}'.format(int(num))  # {:08b} :高位补0
        return integer
    else:
        # 若为浮点数
        # 取整数部分
        integer = int(num)
        # 取小数部分
        flo = num - integer
        # 整数部分进制转换
        integercom = '{:08b}'.format(integer)
        # 小数部分进制转换
        tem = flo
        tmpflo = []
        for i in range(4):
            tem *= 2
            tmpflo += str(int(tem))
            tem -= int(tem)
        flocom = tmpflo
        return integercom + '.' + ''.join(flocom)
if __name__ == '__main__':
    print(tobinarystring(1234))
    print(todecimal(tobinarystring(1234)))

结果:
在这里插入图片描述
试一个小数:
在这里插入图片描述
在这里插入图片描述

原文链接:https://blog.csdn.net/weixin_44052055/article/details/106192844

栏目分类
最近更新