小数位进制转换怎么用 python 表示
在 Python 中进行小数位的进制转换,通常是在十进制小数与其他进制(如二进制、八进制、十六进制)之间转换。下面分别介绍不同情况的实现方法。
十进制小数转二进制小数
要将十进制小数转换为二进制小数,可以使用乘 2 取整的方法。具体步骤是:将小数部分乘以 2,取整数部分作为二进制小数的一位,然后将小数部分继续乘以 2,重复这个过程,直到小数部分为 0 或者达到所需的精度。
def decimal_to_binary(decimal_num, precision=10):binary_fraction = ""fraction = decimal_num - int(decimal_num)while fraction and precision > 0:fraction *= 2bit = int(fraction)binary_fraction += str(bit)fraction -= bitprecision -= 1binary_integer = bin(int(decimal_num)).replace("0b", "")if binary_fraction:return binary_integer + '.' + binary_fractionreturn binary_integerdecimal_num = 3.75
binary_num = decimal_to_binary(decimal_num)
print(f"十进制数 {decimal_num} 转换为二进制数是: {binary_num}")
十进制小数转八进制和十六进制小数
可以借助 Python 的内置函数 oct() 和 hex() 先处理整数部分,小数部分依然使用乘 8 取整(转八进制)或乘 16 取整(转十六进制)的方法。
def decimal_to_octal(decimal_num, precision=10):octal_fraction = ""fraction = decimal_num - int(decimal_num)while fraction and precision > 0:fraction *= 8digit = int(fraction)octal_fraction += str(digit)fraction -= digitprecision -= 1octal_integer = oct(int(decimal_num)).replace("0o", "")if octal_fraction:return octal_integer + '.' + octal_fractionreturn octal_integerdef decimal_to_hexadecimal(decimal_num, precision=10):hex_digits = "0123456789ABCDEF"hex_fraction = ""fraction = decimal_num - int(decimal_num)while fraction and precision > 0:fraction *= 16digit = int(fraction)hex_fraction += hex_digits[digit]fraction -= digitprecision -= 1hex_integer = hex(int(decimal_num)).replace("0x", "")if hex_fraction:return hex_integer + '.' + hex_fractionreturn hex_integerdecimal_num = 10.375
octal_num = decimal_to_octal(decimal_num)
hex_num = decimal_to_hexadecimal(decimal_num)
print(f"十进制数 {decimal_num} 转换为八进制数是: {octal_num}")
print(f"十进制数 {decimal_num} 转换为十六进制数是: {hex_num}")
其他进制小数转十进制小数
对于其他进制(如二进制、八进制、十六进制)的小数转换为十进制小数,可以将整数部分和小数部分分开处理,分别按照相应进制的位权展开求和。
def binary_to_decimal(binary_num):integer_part, _, fraction_part = binary_num.partition('.')decimal_integer = int(integer_part, 2)decimal_fraction = 0for i, bit in enumerate(fraction_part):decimal_fraction += int(bit) * (2 ** -(i + 1))return decimal_integer + decimal_fractionbinary_num = "11.11"
decimal_num = binary_to_decimal(binary_num)
print(f"二进制数 {binary_num} 转换为十进制数是: {decimal_num}")
以上代码实现了十进制与二进制、八进制、十六进制小数之间的相互转换,你可以根据实际需求调整精度等参数。
