Python十进制转二进制,二进制转十进制。浮点数float精度问题「建议收藏」

Python十进制转二进制,二进制转十进制。浮点数float精度问题「建议收藏」Python处理浮点数精度存在的问题以及Python十进制二进制相互之间的转换defzbinary(num):#判断是否为整数ifnum==int(num):integer='{:b}’.format(int(num))#将十进制整数转换为二进制数returnnumelse:integer_part=int(num)#取十进制浮点数的整数部分decimal_part

大家好,欢迎来到IT知识分享网。

Python处理浮点数精度存在的问题
以及Python十进制二进制相互之间的转换

def zbinary(num):

    #判断是否为整数

    if num == int(num):

        integer = '{:b}'.format(int(num)) #将十进制整数转换为二进制数

        return num

    else:

        integer_part = int(num) #取十进制浮点数的整数部分

        decimal_part = num - integer_part #取十进制浮点数的小数部分

        integer_partcom = '{:b}'.format(integer_part) #利用format将十进制数整数转换为二进制数

        #小数部分转化为二进制

        f = decimal_part

        fbb = [] #存小数部分二进制数

        A = True #用于循环

        while A:

            f = f * 2 #小数变二进制数是乘以2,整数是辗转相除法

            fbb += str(int(f))  #逢1进1,0不进。!!!这里有一个问题+=与 =  +有问题

            if f > 1:

                f = f - int(f)  #减1取小数部分继续

            elif f < 1:

                pass

            else:

                break

        flocom = fbb

        return integer_partcom + '.' + ''.join(flocom) #将二进制的字符串拼接在一起

def zdecimal(n):

      #将二进制小数转换为十进制浮点数

      # number1 表示二进制数,number2表示十进制数

    string_number1=str(n)

    decimal = 0  # 小数部分化成二进制后的值

    flag = False

    for i in string_number1:  # 判断是否含小数部分

        if i == '.':

            flag = True

            break

    if flag:  # 若二进制数含有小数部分

        string_integer, string_decimal = string_number1.split('.')  # 分离整数部分和小数部分

        for i in range(len(string_decimal)):

            decimal += 2 ** (-i - 1) * int(string_decimal[i])  # 小数部分化成二进制

        number2 = int(str(int(string_integer, 2))) + decimal

        return round(number2, 4)

    else:  # 若二进制数只有整数部分

        return int(string_number1, 2)  # 若只有整数部分

if __name__ == '__main__':

    a = 0.55

    b = 0.3

    result1 = zbinary(a)

    result2 = zbinary(b)

    result = result1 + result2

    print(result1)

    print(result2)

    #print(result1+result2)

    to1 = zdecimal(result1)

    to2 = zdecimal(result2)

    print(to1)

    print(to2)

    print(to1+to2)

    #print(float(result1,base=10))

IT知识分享网

测试结果
在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/10286.html

(0)
上一篇 2023-02-18 19:00
下一篇 2023-02-20 19:00

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信