陀螺仪测试方法:Delphi浮点数问题

来源:百度文库 编辑:中科新闻网 时间:2024/05/06 02:59:19
遇到一个问题,在delphi中连接后台SQl server数据库,建一个表Test,有三个字段,qty1,qty2,qty3,数据类型都是number(28,8),在delphi界面中加一个DBGrid,然后写以下代码:
if ADOQuery1.FieldByName('Qty1').asfloat<(ADOQuery1.FieldByName('Qty2').asfloat+ADOQuery1.FieldByName('Qty3').asfloat) then
ShowMessage('Qty1:'+ADOQuery1.FieldByName('Qty1').AsString+#13+'Qty2:'+ADOQuery1.FieldByName('Qty2').AsString+#13+'Qty3:'+ADOQuery1.FieldByName('Qty3').AsString);
用以下数据测试:qty1=46.55,qty2=44.83,qty3=1.72奇怪的事情出现了,竟然qty1<(qty+qty3),晕倒了,是Bug吗?
有个地方写错了,应该是qty1<(qty2+qty3)

它是把qty1,qty2,qty3三个数分别四舍五入后再作比较的。
qty1四舍五入后为 47
qty2四舍五入后为 45
qty3四舍五入后为 2
所以当然是 qty1<(qty2+qty3)
这是内部就这样的算法。
如果你不想这样。你可以先将qty2+qty3放到一起,然后再asfloat.

我觉得有可能是浮电数在保存时的误差造成的。比如说:
1.0/3.0 * 3.0 不一定等于1.0。所以一般判断浮点数是否相等,用两个相减小于一个很小的数就判定相等了。你试试看吧。

定义三个float变量再比较