【发布时间】:2017-02-04 11:17:58
【问题描述】:
我需要编写一个 Python 脚本,它将以 10 为底的 x 转换为二进制,小数点后最多 n 个值。而且我不能只使用 bin(x)!这是我所拥有的:
def decimal_to_binary(x, n):
x = float(x)
test_str = str(x)
dec_at = test_str.find('.')
#This section will work with numbers in front of the decimal
p=0
binary_equivalent = [0]
c=0
for m in range(0,100):
if 2**m <= int(test_str[0:dec_at]):
c += 1
else:
break
for i in range(c, -1, -1):
if 2**i + p <= (int(test_str[0:dec_at])):
binary_equivalent.append(1)
p = p + 2**i
else:
binary_equivalent.append(0)
binary_equivalent.append('.')
#This section will work with numbers after the decimal
q=0
for j in range(-1, -n-1, -1):
if 2**j + q <= (int(test_str[dec_at+1:])):
binary_equivalent.append(1)
q = q + 2**j
else:
binary_equivalent.append(0)
print float((''.join(map(str, binary_equivalent))))
假设您通过 decimal_to_binary(123.456, 4) 调用该函数,它应该将 123.456 转换为小数点后 4 位的二进制,得到 1111011.0111。
第一部分很好——它将取小数点前面的数字,在本例中为 123,并将其转换为二进制,输出 1111011
但是,第二部分处理小数点后的值,并没有做我认为应该做的事情。它给出的输出不是 .0111,而是 .1111
我用笔和纸写下每个变量的值来运行代码,它应该可以工作。但事实并非如此。谁能帮我解决这个问题?
我将该函数称为 decimal_to_binary(123.456, 4) 并打印出 1111011.1111
【问题讨论】:
标签: python-2.7 binary