谁能告诉我为什么我这个计算出来的结果会不对?

想到才能做到 2014-07-19 06:30:34
谁能告诉我为什么我这个计算出来的结果会不对?
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才对
...全文
121 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
喜人军 2014-07-20
  • 打赏
  • 举报
回复
asFloat的类型,是浮点小数,对应的类型是Read,其精度在5.0×10-324 .. 1.7×10308。 浮点数保存内存的结构,决定了它只能保存相近的值。
喜人军 2014-07-20
  • 打赏
  • 举报
回复
asFloat的类型,是浮点小数,对应的类型是Read,其精度在5.0×10-324 .. 1.7×10308。 浮点数保存内存的结构,决定了它只能保存相近的值。
lyhoo163 2014-07-20
  • 打赏
  • 举报
回复
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
Frank6600 2014-07-19
  • 打赏
  • 举报
回复
我想是因为你用asfloat的缘故, float不是用来计算精确计算的类别, decimal,currency,money这些类别才是。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧