delphi中的float型的奇怪问题?
//本次核销金额不能大于 单据金额-已核销金额
//明细本次核销金额大于零,注意在生成红单的时候,金额乘以hlbz,
//因为从视图取数,视图中的金额都已经乘以了hlbz,金额变为了负数
d_bchxje:=CDS_Bottom.FieldByName('BchxJe').AsFloat;//明细本次核销金额
d_YsfkJe:=CDS_Bottom.FieldByName('YsfkJe').AsFloat;//明细单据金额
d_Yhxje:=CDS_Bottom.FieldByName('Yhxje').AsFloat;//已核销金额
pfun.ShowMessageOK(floattostr(d_bchxje));
pfun.ShowMessageOK(floattostr(d_YsfkJe-d_Yhxje));
//if (CDS_Bottom.FieldByName('BchxJe').AsFloat)> (CDS_Bottom.FieldByName('YsfkJe').AsFloat-CDS_Bottom.FieldByName('Yhxje').AsFloat) then
if d_bchxje > (d_YsfkJe-d_Yhxje) then
pfun.ShowMessageOK('wxy');
result:='第'+inttostr(i_xh)+'行本次核销金额不能大于未核销金额!';
CDS_Bottom.EnableConstraints;
dxDBBottom.SetFocus;
dxDBBottom.FocusedField := dxDBBottom.FindColumnByFieldName('BchxJe').Field;
exit;
end;
问题: d_bchxje:=CDS_Bottom.FieldByName('BchxJe').AsFloat;//明细本次核销金额
d_YsfkJe:=CDS_Bottom.FieldByName('YsfkJe').AsFloat;//明细单据金额
d_Yhxje:=CDS_Bottom.FieldByName('Yhxje').AsFloat;//已核销金额
这三个变量在delphi中定义的都是double型。从cds取出数,比较d_bchxje > (d_YsfkJe-d_Yhxje)大小。
showmessage()看到的值是相等的,但实际程序走了大于.可能和BCD有关或其他原因。