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