今天遇着一个怪问题(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导至的越界,总之我用这样的方法解决了。