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
记得采纳哦。