35.27-15
20.270000000000003
请问这是什么原因造成的,同时有什么优化的解决方案
1条回答 默认 最新
- lanbda_20080810 2023-02-01 22:26关注
在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
记得采纳哦。解决 无用评论 打赏 举报
悬赏问题
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码