Python 二进制浮点的转换

Python 二进制浮点的转换,python,Python,给定包含小数部分的二进制浮点字符串s:100.0011 输出必须为4.1875 我使用了“.join(map(lambda x:str(int(x,2)),s.split('.')) 这给出了4.3,但不是4.1875int(x,2)不理解如何转换小数的小数部分,因为这些值都是负2的幂,而不是正2的幂。您可以执行以下操作: int_, frac = s.split(".") res = ((int(int_, 2) << len(frac)) + int(frac, 2)) / (2

给定包含小数部分的二进制浮点字符串
s:100.0011

输出必须为
4.1875

我使用了
“.join(map(lambda x:str(int(x,2)),s.split('.'))

这给出了
4.3
,但不是
4.1875
int(x,2)
不理解如何转换小数的小数部分,因为这些值都是负2的幂,而不是正2的幂。您可以执行以下操作:

int_, frac = s.split(".")
res = ((int(int_, 2) << len(frac)) + int(frac, 2)) / (2 ** len(frac))
int,frac=s.split(“.”)
res=((int(int,2)
int(x,2)
不会理解如何转换小数的小数部分,因为这些值都是负2的幂,而不是正2的幂。您可以执行以下操作:

int_, frac = s.split(".")
res = ((int(int_, 2) << len(frac)) + int(frac, 2)) / (2 ** len(frac))
int,frac=s.split(“.”)

res=((int(int,2)您可以使用此代码将其转换为十进制。这不是最有效的,但可以工作:

s = "100.0011" # binary number
n = s.index(".") # number of positions before the decimal point
r = 0 # result

for digit in s.replace(".", ""): # iterate through each digit ommiting the point '.'
    r += int(digit) * 2 ** (n-1) # multiplicate the digit by the respective power of 2
    n -= 1

print r # 4.1875
这是如何工作的?还记得如何将二进制数转换为十进制数(以10为基数):


您可以使用此代码将其转换为十进制。这不是最有效的,但可以工作:

s = "100.0011" # binary number
n = s.index(".") # number of positions before the decimal point
r = 0 # result

for digit in s.replace(".", ""): # iterate through each digit ommiting the point '.'
    r += int(digit) * 2 ** (n-1) # multiplicate the digit by the respective power of 2
    n -= 1

print r # 4.1875
这是如何工作的?还记得如何将二进制数转换为十进制数(以10为基数):


将数字拆分为整数和小数部分,然后使用
int
将每个部分设置为小数,记住小数部分必须根据其长度进行调整:

>>> s = "100.0011"

>>> d = s.split(".")

>>> int(d[0],2) + float(int(d[1],2)) / 2**len(d[1])
4.1875

0011
除以其长度的二次方(24为16)可确保正确处理(3/16为0.1875)。

将数字分成整数和小数部分,然后使用
int
将每个部分设为小数,记住小数部分必须根据其长度进行调整:

>>> s = "100.0011"

>>> d = s.split(".")

>>> int(d[0],2) + float(int(d[1],2)) / 2**len(d[1])
4.1875


0011
除以其长度的二次方(24为16)可确保正确处理(3/16为0.1875)。

删除小数点,将其转换为具有
int(x,2)的整数
,然后根据小数点的位置重新缩放它?@user2357112我这样做了,但那是错误的。因为0011是3。但答案是1875,你应该读一下。0011在基数2中是3。为什么会是1875?@sundarnatarajСааа是的,你错过了重新缩放步骤删除小数点,用
int(x,2)将其转换为int
,然后根据小数点的位置重新缩放它?@user2357112我这样做了,但那是错误的。因为0011是3。但答案是1875。你应该读一下。0011是3,在基数2中。为什么会是1875?@sundarnatarajСаааа是的,你错过了重新缩放步骤
bin
在这里没有使用。你是想说别的吗?@user2357112:是的,对不起,我在代码中写对了,但在文本中写错了。现在修好了,谢谢提醒。这里没有使用
bin
。你是想说别的吗?@user2357112:是的,对不起,我在代码中写对了,但在文本中写错了。现在修好了,谢谢提醒。答案是4对不起,我不知道>>四舍五入浮动。它是固定的,现在给出了正确的答案。答案是4抱歉,我不知道>>四舍五入浮动。它是固定的,现在给出了正确的答案。注意
len(s.split(“.”[0])==s.index(.”)
,您可以使用
zip
range
来计算
n
@jornsharpe的手动增量,谢谢您指出。我明天会编辑它。睡眠时间:)注意
len(s.split(“.”[0])==s.index(.”)
,您可以使用
zip
range
来计算手动递增的
n
@jornsharpe感谢您指出。我明天会编辑它。睡眠时间:)