全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2420
推到 Plurk!
推到 Facebook!

請問div 和mod該如何使用?

答題得分者是:jamests
depblue
一般會員


發表:38
回覆:29
積分:13
註冊:2004-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-26 15:35:17 IP:211.22.xxx.xxx 未訂閱
我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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-26 15:49:48 IP:211.75.xxx.xxx 未訂閱
您好:    看起來是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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-26 15:51:54 IP:211.75.xxx.xxx 未訂閱
您好:    看起來是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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-26 15:57:37 IP:211.75.xxx.xxx 未訂閱
另. 您的訊息中看不太出來Excetion發生點在哪. 所以如果chdate1.GetmmQty(m_chda,m_mlno)這個函式有除法相關運算的話. 也有可能會有這個問題. 希望有所幫助, 供參考.
depblue
一般會員


發表:38
回覆:29
積分:13
註冊:2004-12-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-26 16:24:32 IP:211.22.xxx.xxx 未訂閱
引言: 您好: 看起來是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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-26 16:37:21 IP:211.75.xxx.xxx 未訂閱
您好: Trunc(xxx)是無條件取至整數, 若您需要四捨五入的話可以用round(xxx). 不過四捨五入也可能產生0的結果. 對為0的結果也許額外處置一下會比較好. 希望有所幫助, 供參考.
depblue
一般會員


發表:38
回覆:29
積分:13
註冊:2004-12-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-26 22:31:05 IP:218.171.xxx.xxx 未訂閱
引言: 您好: 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-01-26 23:04:25 IP:61.226.xxx.xxx 未訂閱
您好: 因為div兩側只支援整數, 並回傳整數. 所以Currency型態不符. 供參考.
系統時間:2024-11-22 17:04:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!