考虑一个实数x.y
。如何使用Python函数将x.y
转换为二进制数字,其中整数m
位,小数n
位?
例如,假设
x.y=10.625
,m=6
和n=5
;然后是二进制表示 应该是00101010100
,其中最右边的前五位代表小数(0.625)
,最左边的六位代表整数(10)
。
现在,在给定00101010100
和10
的情况下,如何编写Python函数将10.625
转换为其基本m
表示(即n
)。参数和二进制数?
已编辑:(m
和n
的定义)
m
和n
可以是任何正整数。 (m+n)
是二进制字符串的完整长度,该函数将在转换的数字为正值的情况下生成。
答案 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:无耻的插件,我是这个包的作者。