经过四舍五入处理的两个相同数字float型,在下面情况下不相等:
var
a,b :real;
if a = b then
.....
我在单步运行中看到a和b都是2.04,但他就是返回false,奇怪!
var
a,b :real;
if a = b then
.....
我在单步运行中看到a和b都是2.04,但他就是返回false,奇怪!
解决方案 »
- 想深入学习Delphi网络编程 应该怎么学习,看什么书籍
- 偶在一个窗体中增加一个简单的属性,为什么在对象编辑窗口 ( ObjectInspector)中看不到呢?
- 有关DBGRID行的显示颜色问题
- 如何打开MDI子窗体前先关闭已打开的其他窗体(包括mdi子窗体和普通窗体)?
- 如何限制使窗体不被移动出屏幕以外,还可以全屏幕
- 学历真的很重要吗!(我很恼怒)
- 向高手请教:关于“动态”数组!
- 关于excel导入ACCESS的问题
- http://news.163.com/06/0221/10/2AFR0SUJ0001124S.html
- 各位有项目经验的大师请进!高分相迎,真诚等候!
- 求教一个MEMO字体、颜色设置的问题
- 关于FastReport的问题
还有你没有定义初始值呀
function TPUMCredenceFrm.equal: boolean;
var
sumj,sumd : real;
i : integer;
begin
sumj := 0;
sumd := 0;
dmPUCredence.adryDetilQuery.First;
for i := 0 to dmPUCredence.adryDetilQuery.RecordCount -1 do
begin
sumj := sumj + dmPUCredence.adryDetilQuery.FieldByName('MoneyAmountDr//金额').AsFloat;
sumd := sumd + dmPUCredence.adryDetilQuery.FieldByName('MoneyAmountCr//金额').AsFloat;
dmPUCredence.adryDetilQuery.Next;
end;
if sumd = sumj then
begin
equal := true;
end
else
begin
equal := false;
end;
end;
以上是完整的函数,金额是两位小数,运行后sumd = sumj都等于2.04,但就是返回false我要是手工把sumd 和sumj都减0.1之后就返回真了。
if (a-b < 0.0000001) then
begin
end;
那么写作if (abs(a-b)<deta)
//认为相等楼上的写法有点问题,应该加上绝对值if (abs(a-b) < 0.0000001) then
begin
end;
....
if abs(sumd-sumj)<0.001 then
begin
equal := true;
end改成这样就行了