起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 173|回复: 7

浮点数相减出问题

[复制链接]
发表于 2010-2-2 17:09:12 | 显示全部楼层 |阅读模式
i:=0.00;
               m:=0.00;
               n:=0.00;
               s:= FRONT_INDEX_DT.DataSet.FieldByName('PRODS_NO').AsString;
               x:= FRONT_INDEX_DT.DataSet.FieldByName('TEAM_NO').AsString;
               k:= FRONT_INDEX_DT.DataSet.FieldByName('EMP_NO').AsString;  
             lDataSet:=TCloneDataSet.Create(nil);
            try
               lDataSet.CloneCursor(FRONT_INDEX_DT.DataSet,false,true,false);
               lDataSet.DisableControls;
               lDataSet.First;
               while not lDataSet.Eof do
               begin
                 if (lDataSet.FieldByName('PRODS_NO').AsString=s) and (lDataSet.FieldByName('TEAM_NO').AsString=x) then
                   begin
                      i:=i+lDataSet.FieldByName('PLAN_AMT').AsFloat;
                   end;
                 if (lDataSet.FieldByName('TEAM_NO').AsString=x) and (lDataSet.FieldByName('EMP_NO').AsString=k) then
                   begin
                      n:=n+lDataSet.FieldByName('PLAN_AMT').AsFloat;
                   end;
                  lDataSet.Next;
               end;
               lDataSet.EnableControls;
            finally
               lDataSet.Free;
            end;
代码就类似上面截取的部分,监视  i,m的值都很正常,但i-m的时候有时候会出现3.63797880709171E-12这样的值。'PLAN_AMT'在字典和表中都是数字类型,2位小数。用Business.System.Math.SimpleRoundTo(,-2)处理i,m后还是一样出现这样的问题。
这个问题怎么解决??急
回复

使用道具 举报

 楼主| 发表于 2010-2-3 09:10:43 | 显示全部楼层
没人看到吗?
回复 支持 反对

使用道具 举报

发表于 2010-2-3 10:34:34 | 显示全部楼层
i-m的时候有时候会出现3.63797880709171E-12这样的值
请问,此时 I 和 m 值分别是多少呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-3 11:16:44 | 显示全部楼层
i和m在监视中的值是相等的。但是I-M在监视中就出现如上的问题。

snap1.gif

110.35 KB, 下载次数: 80

回复 支持 反对

使用道具 举报

发表于 2010-2-3 13:50:50 | 显示全部楼层
请问
1、你是哪个版本
2、直接用代码给 m 和 i 赋值21267,然后相减看看是啥
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-3 14:45:18 | 显示全部楼层
2800
直接赋值,结果肯定没问题,因为有些数据监视是正常的。
不正常的数据是循环的时候多个小数相加后产生的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-3 15:20:49 | 显示全部楼层
我把i的值减少了0.01  监视到m-i的值为0.0100000000020373 。
字典部分如下图,数据表中也是number(12,2)

snap2.gif

135.58 KB, 下载次数: 78

回复 支持 反对

使用道具 举报

发表于 2010-2-3 17:30:48 | 显示全部楼层
楼主
1楼代码中没有看到给m赋值,就看到给m赋了个初始值0。
另外
楼主这样试试,截取一下m和i的小数位数,例如截取到小数位数4位,然后相减看看,结果再截取两位。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-11 20:35 , Processed in 0.046204 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表