十进制转化为二进制的逻辑:
1、整数部分:
如图所示,便是浮点数中十进制整数部分转化为二进制的逻辑
整数35,转化为二进制数为100011
2、小数部分
例如:
0.25的二进制:
0.252=0.5 取整是0
0.52=1.0 取整是1
即0.25的二进制为 0.01 ( 第一次所得到为最高位,最后一次得到为最低位)
0.8125的二进制:
0.81252=1.625 取整是1 (整数部分为1)
0.6252=1.25 取整是1
0.252=0.5 取整是0 (整数部分为0)
0.52=1.0 取整是1 (当小数乘以2正好为1时,转化break)
即0.8125的二进制是0.1101(第一次所得到为最高位,最后一次得到为最低位)
3、代码
#十进制浮点数转二进制
def dectbin(num):
# 判断是否为浮点数
if num == int(num):
# 若为整数
integer = '{:b}'.format(int(num))
return integer
else:
# 若为浮点数
# 取整数部分
integer_part = int(num)
# 取小数部分
decimal_part = num - integer_part
# 整数部分进制转换
integercom = '{:b}'.format(integer_part) #{:b}.foemat中b是二进制
# 小数部分进制转换
tem = decimal_part
tmpflo = []
# for i in range(accuracy):
A = True
while A:
tem *= 2
tmpflo += str(int(tem)) #若整数部分为0则二进制部分为0,若整数部分为1则二进制部分为1 #将1或0放入列表
if tem > 1 : #若乘以2后为大于1的小数,则要减去整数部分
tem -= int(tem)
elif tem < 1: #乘以2后若仍为小于1的小数,则继续使用这个数乘2变换进制
pass
else: #当乘以2后正好为1,则进制变换停止
break
flocom = tmpflo
return integercom + '.' + ''.join(flocom)
if __name__ == '__main__':
number = 5
result = dectbin(number)
print(f'{number}的二进制数为:{result}')
代码中关于format进制的知识点见链接:
Python——format格式化函数
number = 10
输出:
10的二进制数为:1010
number = 0.8125
输出:
0.8125的二进制数为:0.1101
number = 2020.928
输出:
2020.928的二进制数为:11111100100.111011011001000101101000011100101011000001