Python 含小数的十、二进制相互转换问题

 1 ‘‘‘
 2 二进制->十进制:bTod
 3     整数部分:a乘以2的n次方(n:a后面的整数位数)
 4     小数部分:a乘以2的-n次方(n:a是小数点后几位)
 5 十进制->二进制dTob
 6     整数部分:短除法(除二取余法,逆序输出)
 7     小数部分:乘二取整法,0.……正向输出所得
 8
 9 函数中形参n为字符串类型
10 ‘‘‘
11 #二进制->十进制
12 def bTod(n, pre = 4):
13     s_int = n
14     s_float = ‘‘
15     total_int, total_float = 0, 0
16     if ‘.‘ in n:
17         s_int, s_float = n.split(‘.‘)
18
19     li = len(s_int)
20     for c in s_int:
21         li = li - 1
22         total_int = total_int + int(c)*pow(2,li)
23
24     lf = 0
25     for c in s_float:
26         lf = lf + 1
27         total_float = total_float +int(c)*pow(2,-lf)
28
29     print("{}转化为十进制是{:.{}f}".format(n,total_int + total_float, pre))
30
31 #十进制->二进制
32 def dTob(n, pre = 4):
33     num_int = int(eval(n))
34     num_float = eval(n) - num_int
35     t_int, t_float = ‘‘, ‘‘
36     if ‘.‘ in n:
37         s_int, s_float = n.split(‘.‘)
38
39     while num_int!= 0:
40         a = num_int % 2
41         t_int = t_int + str(a)
42         num_int = num_int//2
43
44     while num_float != 0:
45         b = num_float*2
46         t_float = t_float + str(int(b))
47         num_float = b - int(b)
48
49     #print(t_int[::-1] + ‘.‘ + t_float[:])
50     print("{}转化为二进制是{:.{}f}".format(n,eval(t_int[::-1] + ‘.‘ + t_float[:]), pre))
51
52
53 a = input("请输入0(转化为十进制)或输入1(转化为二进制):")
54 if a == ‘0‘:
55     while True:
56         n = input("请输入一个二进制数:")
57         flag = 1
58         for c in n:
59             if c != ‘1‘ and c != ‘0‘:
60                 print("输入错误,请重新输入")
61                 flag = 0
62                 break
63         if flag:
64             break
65     pre = int(input("请输入保留几位小数:"))
66     bTod(n,pre)
67 elif a == ‘1‘:
68     while True:
69         n = input("请输入一个十进制数:")
70         flag = 1
71         for c in n:
72             if c <= ‘0‘ or c >= ‘9‘:
73                 print("输入错误,请重新输入")
74                 flag = 0
75                 break
76         if flag:
77             break
78     pre = int(input("请输入保留几位小数:"))
79     dTob(n,pre)
80 else:
81     print("无效输入")

原文地址:https://www.cnblogs.com/zcl843264327/p/9348199.html

时间: 2024-10-16 19:17:55

Python 含小数的十、二进制相互转换问题的相关文章

Python开发【第二十二篇】:Web框架之Django【进阶】

Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 新随笔 联系 订阅 管理 随笔-124  文章-127  评论-205 Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻

Python开发【第十八篇】:MySQL(二)

Python开发[第十八篇]:MySQL(二) 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( SELECT nid, NAME FROM tb1 WHERE nid > 2 ) AS A WHERE A. NAME > 'alex'; 临时表搜索 1.创建视图 --格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v

Python开发【第二十篇】:缓存

Python开发[第二十篇]:缓存redis&Memcache 点击这里 Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可

shu_1171 十-&gt;二进制转换(输入输出控制)

http://202.121.199.212/JudgeOnline/problem.php?cid=1079&pid=19 分析:主要是输出格式控制 "对于每个n,以11位的宽度右对齐输出n值": 即包括该数在内一共11位,右对齐为printf的默认方式,所以用 %11d  来解决. 另外, 输出左对齐与右对齐,需在指定输出长度的时候才有意义: 如无指定长度,则输出从行首开始,有多长输出多长: 左对齐: %-11d 实例: #include <stdio.h> i

python的进制转换二进制,八进制,十六进制及其原理

#!usr/bin/env python# coding:utf-8 def binary(): '''二进制的方法与算法'''    Number = 10    Number1 = 20    Number2 = 30    print bin(Number),type(bin(Number1)),bin(Number2) #用十进制算法来表示二进制   # 除余法:10%2=0放入字符串个位'0',5%2=1放入字符串的十位'10',2%2=0放入百位'010',最后余数放入千位'1010

大数减法(含小数)

正数减法 描述: 两个任意长度的正数相减,这两个正数可以带小数点,也可以是整数,请输出结果.输入的字符串中,不会出现除了数字与小数点以外的其它字符,不会出现多个小数点以及小数点在第一个字符的位置等非法情况,所以考生的程序中无须考虑输入的数值字符串非法的情况. 详细要求以及约束:1.输入均为正数,但输出可能为负数:2.输入输出均为字符串形式:3.如果输出是正数则不需要带符号,如果为负数,则输出的结果字符串需要带负号例如:2.2-1.1 直接输出为"1.1",1.1-2.2 则需要输出为&

Python基础学习(十)

Python I/O模型 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 概念说明 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件

C++和python利用struct结构传输二进制数据实现

网络编程中经常会涉及到二进制数据传输的问题,在C++中常用的传输方式有文本字符串和结构体封包.如果能将要发送的数据事先放进连续的内存区,然后让send函数获取这片连续内存区的首地址就可以完成数据的发送了,文本字符串如char型数组,以字节为单位,在内存中是顺序存储的,所以可以直接用send函数发送.但是如果要同时发送多个不同类型的数据时,它们在内存中存储的地址是随机的,不是顺序存储的,而且它们之间的相对位置也无法确定,这样就需要一种数据组织方式来明确各数据之间的相对位置.结构体显然就是一种的数据

Use My Python,Send Your Mail(十来行代码)

人生苦短,我用python,最近实习一直在用工作,因为我做的工作涉及到海量数据,程序跑下来用上代理,一个月可能也跑不完,但是我快要回去考试两周,作为一个强迫症的coder,我必须要得知我的程序怎么了!!!所以我让我的程序成功执行一段时间,但是我又是非常"懒惰"的人(其实优秀的程序员都要很"懒惰"呢!坚决写简洁的代码,如果可以,越短越好,所以前短时间写了个160行的py 2048.),看了好多版本,看得我很郁闷呢-最后经过整理,得出这十行,送你! import smt