肝了一夜找错误,原来错误在这里
vb吧
全部回复
仅看楼主
吧务
level 13
2021年02月26日 06点02分 1
吧务
level 13
下次大家要小心了,这个坑货比对
2021年02月26日 06点02分 2
顺便问一下有什么好的解决方法吗?
2021年02月26日 06点02分
也许你看到的那两个1.8都是“近似值”吧。你在那种儿,看看两个变量的“差值”是多少呢……
2021年02月26日 11点02分
吧务
level 14
我感觉有点奇怪
2021年02月26日 09点02分 4
代码里面写死两个1.8裆燃是相等的了
2021年03月01日 02点03分
level 10
我参考楼上的代码,弄个“更能说明问题”的。
2021年02月26日 11点02分 5
level 7
1.8可能是1.80000000125之类。浮点数计算容易产生a+b-a-b=1e-11之类的问题,浮点数比较相等一般用abs(a-b)<1e-10之类的。或者乘以10,100用整数计算(金钱之类)。
具体可以看看浮点数存储方法
2021年02月26日 12点02分 7
看你头像我还以为我进入了红警吧
2021年02月27日 07点02分
VB6的话,可以借用Round函数来保留指定多少位小数后再比较
2021年03月01日 02点03分
@yjryym 一个原理,不如整数安心啊。
2021年03月01日 02点03分
@天之坦克杀手 数学库都是基于浮点数的,整数不方便
2021年03月02日 02点03分
level 13
今天测试了下,的确是精度问题,楼主自己测试吧,Round函数可以解决
2021年03月01日 05点03分 8
这些情况下VB调试时或输出都将后面的舍掉了,所有值都是1.8,而且single内部存储的还是实际的值
2021年03月01日 05点03分
@隨風🍁缒夢 主要是因为Single和Double内部都是以二进制表示,而显示是以十进制字符串来表示,进制转换导致了舍入取近似值的问题。
2021年03月02日 02点03分
1