关于python计算时精度问题

35.27-15
20.270000000000003
请问这是什么原因造成的,同时有什么优化的解决方案

在python基础里都讲过,浮点数计算存在误差,你可以试试补零。就是把小数点移动到最后面。

35.27变成3527
15变成1500
然后用3527-1500得2027
2027再挪小数点变成20.27可以避免误差。

#免误差浮点数相减

def subtraction(a,b):
    a = str(a).split(".")
    #print(a)
    b = str(b).split(".")
    #print(b)
    print(a,b,"1")
    if(len(a[1])>len(b[1])):
        print(a,"a")
        i = len(a[1])
        r_a = 0
        r_b = i-len(b[1])
    else:
        print(b,"b")
        i = len(b[1])
        r_a = i-len(a[1])
        r_b = 0
    a = "".join(a)
    b = "".join(b)
    print(a,b,"2")
    a_l = []
    b_l = []
    for d in range(len(a)):
        a_l.append(a[d])
    for d in range(len(b)):
        b_l.append(b[d])
    a = a_l
    b = b_l
    print(a,b,"3")
    for __count in range(r_a):
        a.append('0')
    for __count in range(r_b):
        b.append('0')
    print(a,b,"4")
    a = "".join(a)
    b = "".join(b)
    print(a,b,"5")
    c = str(int(a)-int(b))
    print(c,"c")
    __done = []
    for __count in range(len(a)-len(c)):
        __done.append(0)
    for d in range(len(c)):
        __done.append(c[d])
    print(__done,"__done 1")
    i = len(__done)-i
    __done.insert(i,".")
    print(__done,"__done 2")
    c = float("".join('%s' %d for d in __done))
    print(c,"c")
    return(c)


print(subtraction(1.001,1.0001))

该程序仓促写成,还有漏洞,就是a如果小于b就会报错闪退,如果需要修复版加我微信:bd20080810 名字:BLEEM
记得采纳哦。

img