Python 十进制(可包含小数)转二进制

原理

假设有十进制数A.B,对应的二进制数为abc.def
整数部分A = a*2^2 + b*2^1 + c*2^0,所以当A除以2时,得到a*2^1 + b*2^0和余数c除2取余)。
同理,小数部分B = d*2^(-1) + e*2^(-2) + f*2^(-3),当B乘以2时,B*2 - d = e*2^(-1) + f*2^(-2),即 B*2的整数部分求出了d乘2取整)。

所以十进制转换成二进制算法如下:

def decimal_to_binary(decimal):
    integer_part = int(decimal)  # 提取整数部分
    fractional_part = decimal - integer_part  # 提取小数部分

    # 转换整数部分为二进制
    binary_integer = ""
    if integer_part == 0:
        binary_integer = "0"  # 十进制数为0时,二进制为0
    else:
        while integer_part > 0:
            binary_integer = str(integer_part % 2) + binary_integer
            integer_part = integer_part // 2

    # 转换小数部分为二进制
    binary_fractional = ""
    while fractional_part > 0:
        fractional_part *= 2
        bit = int(fractional_part)
        binary_fractional += str(bit)
        fractional_part -= bit
        if len(binary_fractional) > 12:
            break  # 限制小数部分的位数为12位

    binary = binary_integer
    if binary_fractional != "":
        binary += "." + binary_fractional

    return binary

标签: python, 算法, 十进制, 二进制

添加新评论