Python关于任意十进制的整数转换为其他进制数有可以直接用的函数,详见Python-编码规则,但是对于小数部分如何转换没有现成的函数。这里采用如下方法进行实现:
首先讲一下形成代码的理论思路:
十进制小数转换为其他进制方法(以二进制为例):取小数点后的数乘以2,取整数部分(0或1)标在后面,然后再用乘以2之后的数的小数部分再乘以2,再取其整数部分标在后面。以此类推,直到小数部分为0或者位数足够多。最后把取的整数部分按先后次序排列,就获得小数的二进制结果。
#代码如下:
import math
from decimal import Decimal
aa = float(input('请输入要转换的十进制小数:'))
#注意通过input函数得到的变量为字符串类型,要利用float()函数转换为浮点数类型
ly = 2
#可调整的地方1:这里设置要转换为几进制
n = 10
#可调整的地方2:设定保留的转换之后的小数的位数(之所以要设定是因为有些十进制的小数如0.7,化为其他进制的小数时如二进制,会出现无限循环的情况)
m = range(n)
cc = []
for i in m:
bb = aa * ly
dd = math.floor(bb)
#math.floor()函数向下取整(即直接取整数部分);math.ceil()函数向上取整数(即取整数部分加1);这两者均不进行四舍五入的运算
cc.append(dd)
aa = Decimal(str(bb)) - Decimal(str(dd))
# Decimal输入的参数要求是字符串类型,如Decimal('1.1')+Decimal('2.2'),所以这里应该利用str()函数将数据转换为字符串类型
if ly > 10:
if cc[i] == 10:
cc[i] = 'A'
if cc[i] == 11:
cc[i] = 'B'
if cc[i] == 12:
cc[i] = 'C'
if cc[i] == 13:
cc[i] = 'D'
if cc[i] == 14:
cc[i] = 'E'
if cc[i] == 15:
cc[i] = 'F'
#以上的条件语句是当将数据转换为十六进制的时候,应该用字母来代替10以上的数字而添加的
ee = [str(i) for i in cc]
ff = ''.join(ee)
#以上两行是将列表中的元素连起来形成一个字符串后再进行输出
print('转换得到的' + str(ly) + '进制小数为:' + '0.' + ff)
注意这里是正数的转换,如果需要转换负数,那就先转换该数的正数形式,再在转换结果前加上负号即可。
可能有更简便的方法,欢迎交流和讨论。