将此数字(9.10938291*10**31)转换为二进制(Python)的代码

2024-05-20 22:04:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把这个数转换成二进制,这样我以后就可以把它转换成浮点数,我知道的算法是在一个数的点后面,例如,如果我把9.32放在函数puntoflot()上,取0.32除以0.5,当它除以0.5时,它取第一个数字,放在z上,然后取左边的小数,继续除以它,你可以在代码中找到它。。。。如果这个算法是好的任何帮助将是一个感激的

valorbinario()函数对于9.32这样的大数字非常有效,但是对于9.10938291*10**-31这样的数字,它根本不运行valorbinario(),因为它指出了这个错误

Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    valorbinario(9.10938291*10**-31)
  File "C:/Users/Emmanuel/Desktop/asdfad.py", line 26, in valorbinario
    x=puntoflot(numeroderecha)
  File "C:/Users/Emmanuel/Desktop/asdfad.py", line 11, in puntoflot
    dere=int(x[2:])
ValueError: invalid literal for int() with base 10: '18765820000004e-32'

puntoflot()接收点之后的部分,例如9.28它采用0.28形式valorbinario()valorbinario采用浮点数并执行许多操作,它减去小数并将其放在函数puntoflot()上,以便将其转换为二进制,然后将本例中的自然数9转换为二进制,然后返回整数本例中的编号为“1001.010001111010111011001100”

那我该怎么做??如果你能想出一个更好的算法来转换成二进制我会很高兴,但如果没有,我怎么能解决这个??你知道吗

好的,这是我的密码

首先用一个数字运行valorbinario()另一个函数idk为什么我把它变成一个函数。。。。我刚开始学代码


def puntoflot(y):
    i=0
    z=""
    while i<=23:
        x=str(y/0.5)
        z=z+str(x[0])
        dere=int(x[2:])
        y=float("0."+str(dere))
        i+=1
    return z


def valorbinario(numero):
    numero=str(numero)
    pos=numero.index(".")
    numeroderecha=float("0."+str(numero[pos+1:]))
    numeroizquierda=numero[:pos]
    y=bin(int(numeroizquierda))
    x=puntoflot(numeroderecha)
return y[2:]+"."+str(x)

Tags: 函数inpos算法line二进制数字file
1条回答
网友
1楼 · 发布于 2024-05-20 22:04:16

对于int而言,bin(numero)起作用。对于小于1的float,可以尝试以下方法:

bin(int(1/(numero)))

这将给出数字的倒数(1/x),并将其转换为int,然后您可以稍后再次反转。你知道吗

相关问题 更多 >