from decimal import Decimal
def decimal_to_binary(decimal):
# 处理整数部分
integer_part = int(decimal)
binary_integer = bin(integer_part)[2:] # 去掉二进制前缀"0b"
# bin()是一个内置函数,用于将整数转换为二进制字符串。它接受一个整数作为参数,并返回一个以"0b"开头的二进制字符串表示
# 处理小数部分
decimal_part = decimal - integer_part
binary_decimal = ""
precision = 23 # 设置小数部分的精度
while decimal_part > 0 and precision > 0:
decimal_part *= 2
bit = int(decimal_part)
binary_decimal += str(bit)
decimal_part -= bit
precision -= 1
binary = binary_integer + "." + binary_decimal
return binary
# 测试
decimal = Decimal('0.559999942779541015625000000000')
binary = decimal_to_binary(decimal)
print(str(decimal)+"转成二进制是:"+binary)
decimal2 = Decimal('0.78')
binary2 = decimal_to_binary(decimal2)
print(str(decimal2)+"转成二进制是:"+binary2)
from decimal import Decimal
def binary_to_decimal(binary):
# 将二进制小数转换为十进制
decimal = Decimal('0.0000')
power = -1
for bit in binary[2:]:
#decimal += int(bit) * 2 ** power
decimal += Decimal(int(bit)) * Decimal(2) ** power
power -= 1
#print(decimal)
return decimal
binary1 = "0.1000111101011100001010001111010111000010"#0.56
binary2= "0.11000111101011100001010"
print(binary2 +"转成十进制是:"+str(binary_to_decimal(binary2)))
我用以上代码,先 十转二,再二转十。二进制保留23位。0.54 和0.56 完美符合预期。可是0.23和0.78,越转越大,没道理啊!0.45 和0.98,最后结果也不一致,有哪位能解释一下吗?谢谢
--
FROM 120.242.238.*