数字显示相等,但提示不等 |
答題得分者是:pgdennis
|
baby2321
初階會員 發表:52 回覆:165 積分:48 註冊:2005-06-11 發送簡訊給我 |
dbgrid1用于显示数据库某表 该表中数字信息为money型
stringgrid1用于显示统计结果并计算是否相等
cal1,cal2分别用于统计 预算和实际支出
按以下代码实施后 stringgrid1中数字显示相等 但stringgrid1.Cells[1,1]却提示不等 不知怎么回事???
procedure TSum.sumtable; var count,i:integer; cal1,cal2:double; begin //计算表中的记录数 count:=datasource1.DataSet.RecordCount; //统计信息,判断是否相等 cal1:=0; cal2:=0; while not datasource1.DataSet.Eof do begin cal1:=strtofloat(dbgrid1.Fields[2].Text) cal1; cal2:=strtofloat(dbgrid1.Fields[3].Text) cal2; datasource1.DataSet.Next; end; //显示统计结果 stringgrid1.Cells[1,1]:='是否相等'; stringgrid1.Cells[2,1]:=floattostr(cal1); stringgrid1.Cells[3,1]:=floattostr(cal2); //问题出现了... if (cal1<>cal2) then begin stringgrid1.Cells[1,1]:='不相等'; stringgrid1.Font.Color:=clred; end else stringgrid1.Cells[1,1]:='相等'; end;这里 stringgrid1中数字显示相等 但stringgrid1.Cells[1,1]却提示不等 且红体 后来 我把“//问题出现了..”后面的代码改为 if (cal1=cal2) then begin stringgrid1.Cells[1,1]:='相等'; end else stringgrid1.Cells[1,1]:='不相等'; stringgrid1.Font.Color:=clred; end; //显示相等 但红体请问各位大大 这到底是怎么回事? 發表人 - baby2321 於 2005/10/19 00:55:27 |
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
您不妨这样试试:
if (cal1=cal2) then begin stringgrid1.Cells[1,1]:='相等'; end else stringgrid1.Cells[1,1]:='不相等'; stringgrid1.Font.Color:=clred; 这一句被你抛在IF结构体之外,所以不管IF结果如何,都会触发。 试试这样写: if (cal1=cal2) then begin stringgrid1.Cells[1,1]:='相等'; end else begin stringgrid1.Cells[1,1]:='不相等'; stringgrid1.Font.Color:=clred; end;建议多使用Begin/End对程序段进行包裹,开始学习时不要讲求程序缩写这些技巧,很容易出错,等熟练了并且明确知道程序运作流程,就可以讲究一些写法技巧了。 |
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
|
baby2321
初階會員 發表:52 回覆:165 積分:48 註冊:2005-06-11 發送簡訊給我 |
|
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
|
baby2321
初階會員 發表:52 回覆:165 積分:48 註冊:2005-06-11 發送簡訊給我 |
if (cal1<>cal2) then begin stringgrid1.Cells[1,1]:='不相等'; stringgrid1.Font.Color:=clred; end else stringgrid1.Cells[1,1]:='相等'; end; //在数字显示相等的情况下 stringgrid1.Cells[1,1]却提示不等???我用上面的写法测试数据 奇怪的是 有时显示正确 有时又有问题 自己也不知道具体什么原因 现在显示又是正确的了 阁下的写法肯定是对的 我再试试 如果还是有问题 就只好改成“肯定”格式了 |
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
|
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
|
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject); var F1:double; F2:double; begin F1:=0.9999999999999994; F2:=0.9999999999999993; Edit1.Text:=floatTostr(F1); Edit2.Text:=floatTostr(F2); if F1=F2 then ShowMessage('相等') else ShowMessage('不相等'); end;如果已經確定小數點會精確到第幾位數,那用double也沒什好顧慮的 如果不確定...那就要小心點,有可能會發生上面的情形 FloatToStr()並不能處理比Double更多位數... 上面的例子會發現顯示的結果是一樣的 但是兩變數相比較,是不一樣的 星期一,星期二...星期日..星期一..無窮迴圈@@
------
星期一,二...無窮迴圈@@ |
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
|
baby2321
初階會員 發表:52 回覆:165 積分:48 註冊:2005-06-11 發送簡訊給我 |
感谢pgdennis的精辟讲解
如果我改为
procedure TForm1.Button1Click(Sender: TObject); var F1:double; F2:double; begin F1:=0.9999999999999994; F2:=0.9999999999999993; Edit1.Text:=floatTostr(F1); Edit2.Text:=floatTostr(F2); if Edit1.Text<>Edit2.Text2 then ShowMessage('不相等') else ShowMessage('相等'); end;即直接利用字符串比较 是不是要好一些 我在原来的代码中把比较方式调整为 字符串的比较 可以实现预期效果 發表人 - baby2321 於 2005/10/20 06:35:18 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |