将实数转换为二进制数,反之亦然(在Python中)

时间:2018-08-14 14:00:25

标签: python binary combinations

考虑一个实数x.y。如何使用Python函数将x.y转换为二进制数字,其中整数m位,小数n位?

  

例如,假设x.y=10.625m=6n=5;然后是二进制表示   应该是00101010100,其中最右边的前五位代表小数   (0.625),最左边的六位代表整数(10)

现在,在给定0010101010010的情况下,如何编写Python函数将10.625转换为其基本m表示(即n)。参数和二进制数?

已编辑:(mn的定义)

mn可以是任何正整数。 (m+n)是二进制字符串的完整长度,该函数将在转换的数字为正值的情况下生成。

2 个答案:

答案 0 :(得分:2)

这里有一些代码可以满足您的需求。这些函数不进行错误检查,并且对于trim($_POST['username']) == false的较大值(例如,超出m + n的情况可能会关闭),因为标准float变量仅包含53个有效的二进制数字。对于较大的53,可以使用此处未显示的一些技巧。

m + n

您想要的打印输出是

def float_to_binary(x, m, n):
    """Convert the float value `x` to a binary string of length `m + n`
    where the first `m` binary digits are the integer part and the last
    'n' binary digits are the fractional part of `x`.
    """
    x_scaled = round(x * 2 ** n)
    return '{:0{}b}'.format(x_scaled, m + n)

def binary_to_float(bstr, m, n):
    """Convert a binary string in the format given above to its float
    value.
    """
    return int(bstr, 2) / 2 ** n

print(float_to_binary(10.625, 6, 5))
print(binary_to_float('00101010100', 6, 5))

答案 1 :(得分:0)

您可以使用 Binary fractions 包。使用此包,您可以将二进制分数字符串转换为浮点数,反之亦然。

示例:

>>> from binary_fractions import Binary
>>> str(Binary(10.625))
'0b1010.101'
>>> float(Binary("1010.101"))
10.625

它有更多的辅助函数来操作二进制字符串,例如:shift、add、fill、to_exponential、invert...

PS:无耻的插件,我是这个包的作者。