欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

#Python# 十进制数转换为二进制数(包含小数)

程序员文章站 2022-07-15 09:56:41
...

#Python# 十进制数转换为二进制数(包含小数)

问题描述

编写程序,输入十进制小数(只考虑正数),把它转换为以字符串形式存储的二进制小数,输出该二进制小数字符串。对于转换得到的二进制小数,小数点后最多保留10位。小数点后不足10位,则输出这些位,尾部不补0;小数点后超出10位,则直接舍弃超出部分。十进制转换成二进制时,需要将整数和小数部分分开。整数部分的策略是除2取余,而小数部分的策略是乘2取整,分别转换后再将整数和小数部分合起来。不清楚的同学自己上网查阅相关资料。

本题需要编写2个函数,分别对应整数和小数部分的转换过程。

问题分析

拆分问题为:
(1)整数部分转换为二进制;
(2)小数部分转化为二进制;
(3)将整数部分与小数部分组合并输出。
问题(1):构造函数conInt(),将整数部分除2取余存入列表中,后逆序列表再合并为字符串返回;
问题(2):构造函数conFra(),将小数部分乘2取整存入列表篇中,后合并为字符串返回。需注意的是遇到无限乘2取整的十进制小数时,应舍0入1。
问题(3):使用print(f"{a},{b}")的句式,将字符串组合输出

代码

def conInt(n):
    s=[]
    while(n):
        s.append(str(n%2))
        n=n//2
    s.reverse()
    return "".join(s)

def conFra(n):
    x=[]
    s=[]
    while(n):
        n=n*2
        x.append(str(int(n)))
        n=n-int(n)
    for i in range(0,10):
        s.append(x[i])
    return "".join(s)


def main():
    n=eval(input())
    a=int(n)
    b=n-a
    print(f"{conInt(a)}.{conFra(b)}")

main()