哪位高手能告诉小弟我为什么小弟我这个计算出来的结果会不对

谁能告诉我为什么我这个计算出来的结果会不对?
谁能告诉我为什么我这个计算出来的结果会不对?
ADOQuery1.FieldByName('je').asFloat-ADOQuery1.FieldByName('yhje').asFloat-ADOQuery1.FieldByName('sfje').asFloat

单据跟踪各数值如下:
ADOQuery1.FieldByName('je').asFloat=1786.4
ADOQuery1.FieldByName('yhje').asFloat=0.4
ADOQuery1.FieldByName('sfje').asFloat=1786

正确的结算应该是0才对

------解决思路----------------------
我想是因为你用asfloat的缘故,
float不是用来计算精确计算的类别,
decimal,currency,money这些类别才是。
------解决思路----------------------
asFloat的类型,是浮点小数,对应的类型是Read,其精度在5.0×10-324 .. 1.7×10308。
浮点数保存内存的结构,决定了它只能保存相近的值。
例如:浮点数2.01,它在计算机内存中的值,只能保存为2.0099999999999998
所以,在浮点值的计算中,只能理解为相近值的计算,计算值是有一定的误差的。

这样,你的计算值:
ADOQuery1.FieldByName('je').asFloat-ADOQuery1.FieldByName('yhje').asFloat-ADOQuery1.FieldByName('sfje').asFloat<>0





------解决思路----------------------
asFloat的类型,是浮点小数,对应的类型是Read,其精度在5.0×10-324 .. 1.7×10308。
 浮点数保存内存的结构,决定了它只能保存相近的值。
------解决思路----------------------
asFloat的类型,是浮点小数,对应的类型是Read,其精度在5.0×10-324 .. 1.7×10308。
 浮点数保存内存的结构,决定了它只能保存相近的值。