請問div 和mod該如何使用? |
答題得分者是:jamests
|
depblue
一般會員 發表:38 回覆:29 積分:13 註冊:2004-12-27 發送簡訊給我 |
我Run一個程式,裡面有使用到div和mod 不過,結果都會出現下面的錯誤,
程式大約如下:
procedure TzztsFrm.Button1Click(Sender: TObject);
var m_chda,m_mlno,m_stbno:string;
m_nowqty,m_ftrs,m1,m2,m_tqty:currency;
begin
mlbscQu.First; while not mlbscQu.Eof do
begin
m_mlno := mlbscQuMLNO.Value;
m_ftrs := mlbscQuFTRS.Value;
m_nowqty := StrToFloat(chdate1.GetmmQty(m_chda,m_mlno)); m1 := Trunc(m_nowqty) div Trunc(m_ftrs);
m2 := Trunc(m_nowqty) MOD Trunc(m_ftrs); mlbscQu.Next;
end;
//m_ftrs的值都是大於0
//m_nowqty的值可以是大於0 或是等於0 問題到底出在哪裡?
|
jamests
初階會員 發表:0 回覆:43 積分:28 註冊:2005-01-21 發送簡訊給我 |
您好: 看起來是Trunc(m_ftrs)取到為0的資料了.
您可以試試加個檢驗:
>>while not mlbscQu.Eof do begin
>> m_mlno := mlbscQuMLNO.Value;
>> m_ftrs := mlbscQuFTRS.Value;
>> m_nowqty := StrToFloat(chdate1.GetmmQty(m_chda,m_mlno));
if Trunc(m_ftrs)=0 then ShowMessage(format('division by zero: %d', [Trunc(100.99)]));
>> m1 := Trunc(m_nowqty) div Trunc(m_ftrs);
>> m2 := Trunc(m_nowqty) MOD Trunc(m_ftrs); >> mlbscQu.Next;
>>end; 看看會不會抓到為0的訊息. 希望有所幫助, 供參考.
|
jamests
初階會員 發表:0 回覆:43 積分:28 註冊:2005-01-21 發送簡訊給我 |
您好: 看起來是Trunc(m_ftrs)取到為0的資料了.
您可以試試加個檢驗:
>>while not mlbscQu.Eof do begin
>> m_mlno := mlbscQuMLNO.Value;
>> m_ftrs := mlbscQuFTRS.Value;
>> m_nowqty := StrToFloat(chdate1.GetmmQty(m_chda,m_mlno));
if Trunc(m_ftrs)=0 then ShowMessage(format('division by zero: %d', [Trunc(m_ftrs)]));
>> m1 := Trunc(m_nowqty) div Trunc(m_ftrs);
>> m2 := Trunc(m_nowqty) MOD Trunc(m_ftrs); >> mlbscQu.Next;
>>end; 看看會不會抓到為0的訊息. 希望有所幫助, 供參考.
|
jamests
初階會員 發表:0 回覆:43 積分:28 註冊:2005-01-21 發送簡訊給我 |
|
depblue
一般會員 發表:38 回覆:29 積分:13 註冊:2004-12-27 發送簡訊給我 |
引言: 您好: 看起來是Trunc(m_ftrs)取到為0的資料了. 您可以試試加個檢驗: >>while not mlbscQu.Eof do begin >> m_mlno := mlbscQuMLNO.Value; >> m_ftrs := mlbscQuFTRS.Value; >> m_nowqty := StrToFloat(chdate1.GetmmQty(m_chda,m_mlno)); if Trunc(m_ftrs)=0 then ShowMessage(format('division by zero: %d', [Trunc(m_ftrs)])); >> m1 := Trunc(m_nowqty) div Trunc(m_ftrs); >> m2 := Trunc(m_nowqty) MOD Trunc(m_ftrs); >> mlbscQu.Next; >>end; 看看會不會抓到為0的訊息. 希望有所幫助, 供參考.我找到錯誤所在了,是m_ftrs= 0.5 不過為何當m_ftrs >0 and m_ftrs <1 時,Trunc不能使用 Trunc returns an Int64 value that is the value of X rounded toward zero. |
jamests
初階會員 發表:0 回覆:43 積分:28 註冊:2005-01-21 發送簡訊給我 |
|
depblue
一般會員 發表:38 回覆:29 積分:13 註冊:2004-12-27 發送簡訊給我 |
引言: 您好: Trunc(xxx)是無條件取至整數, 若您需要四捨五入的話可以用round(xxx). 不過四捨五入也可能產生0的結果. 對為0的結果也許額外處置一下會比較好. 希望有所幫助, 供參考.多謝,我了解了, 不過想請問一下如果使用div會有什麼限制? 我之前利用div去除,因為有錯誤,我才加上Trunc 那我原本的式子錯誤是在哪裡? 我之前寫 m1 := m_nowqty div m_ftrs; //m1,m_nowqty,m_ftrs:currency 會出現運算型態不符的訊息,上面是哪邊出錯了? |
jamests
初階會員 發表:0 回覆:43 積分:28 註冊:2005-01-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |