Delphi 中浮点比较的怪问题

在Delphi 7中,遇到一个问题,当比较浮点数sglThis(34.45)与sglBase(34.45)时,条件判断(sglThis <= sglBase)居然返回False。问题出在sglBase和sglBase1的计算过程中。通过将计算结果转换为字符串再转回浮点数,修复了比较错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 今天遇着一个怪问题(Delphi 7)


var

  sglBase,sglBase1,sglThis,sglB,sglUp,sglDown : double;  //这里即使用Extended类型也是不行

begin

    with cxGrd.datacontroller do  //此处为cxgrid 网格控件

    begin

          sglthis := strtofloat(vartostrdef(getvalue(focusedrecordindex,columnIndex),'0'));  //这里取得的输入值为 34.45

         sglB := strtofloat(vartostrdef(getvalue(focusedrecordindex,BasecolumnIndex),'0'));  //这里是比较用的基出值,也是34.44

         sglUp := strtofloat(vartostrdef(getvalue(focusedrecordindex,UpcolumnIndex),'0'));  //这里是比较用的上限,也是0.001

         sglUp := strtofloat(vartostrdef(getvalue(focusedrecordindex,DowncolumnIndex),'0'));  //这里是比较用的下限,也是0

         //修改前(即出问题的代码)

         sglBase := sglB + sglUp;   //最大上限  34.44+0.001  = 34.45

         sglBase1 := sglB + sglDown;  //最小下限  34.44 + 0 = 34.44

         if (sglThis <= sglBase) and (sglThis >= sglBase1) then  //这个红色的比较  34.45 <= 34.45 竟然为False   而原本应为True

            .........

         //修改后 (通过的代码)

         sglBase := strtofloat(floattostr(sglB + sglUp));   //最大上限  34.44+0.001  = 34.45

         sglBase1 := strtofloat(floattostr(sglB + sglDown));  //最小下限  34.44 + 0 = 34.44

         if (sglThis <= sglBase) and (sglThis >= sglBase1) then  //现在的比较为True    一切正常了

            .........

    end;

end;


这样的问题,不知道是不是strtofloat导至的越界总之我用这样的方法解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值