線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:6393
推到 Plurk!
推到 Facebook!

Delphi 除法有問題

尚未結案
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-03 19:11:47 IP:210.201.xxx.xxx 未訂閱
大大, / 和 div 是 Delphi 除法的運算了, 如果要用除法來計算繪圖中的列或行值, 則因為 / 傳回的是 Extended,又不能用 Integer() 強制轉換, 不方便使用於繪圖計算,因為繪圖一般都用整數來計算。 用 div 的話會有四捨五入的問題,以決定列號為例,若列高10 pixels 99 div 10,會傳回10,即第10列,但其實應該是第 9 列才對,div 不適用。 但如果用 C 語言的 /,則會傳回 9,得到第 9 列,這就正確了。 最後我只好用 inline 組合語言來寫個只會傳回"商"整數的除法函式, 真感慨,都已經使用 Delphi 這套不得了的工具了, 還得為個除法而要動用組合語言。 除了動用組合語言,還有別的方法嗎?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-03 21:46:51 IP:203.204.xxx.xxx 未訂閱
引言: 用 div 的話會有四捨五入的問題,以決定列號為例,若列高10 pixels 99 div 10,會傳回10,即第10列,但其實應該是第 9 列才對,div 不適用。
cancer 你好 / :除法運算 div :取商數運算 Mod :取餘數運算 因此 99 div 10 = 9 (怎麼會傳回10 呢),而pixels的註標是從0開始計算的,0:第1列、1:第2列....故而9:第10列,所以要得正確的列數必須將得到的值再減1即可,如:(99 div 10)-1 才對啊! _______________________________________ 深藍的魚,祝您好運..........連連
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-03 23:21:24 IP:61.31.xxx.xxx 未訂閱
cancer 你好, 我試了一下沒發現這個問題
procedure TForm1.Button1Click(Sender: TObject);
var a : Double;
begin
  a := 99 div 10; //得到9
  Edit1.Text := FloatToStr(a);
end;
我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
RogerHer
一般會員


發表:11
回覆:39
積分:10
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-04 11:04:13 IP:61.221.xxx.xxx 未訂閱
應該是 cancer 兄記錯了, div 是整數的除法,所以 (99 div 10) 是傳回 9 ,而 (99 / 10) 因為四捨五入會傳回10,所以我查了一下 on-line help ,似乎可以用 int() 先取得整數部份再用 round() 轉換為 integer. round(int(99 div 10)); 如果想加快速度的話甚至可以用減法迴圈來做....不過成效可能不大
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-05 00:04:43 IP:210.201.xxx.xxx 未訂閱
謝謝大大們解答 我查了HELP,得到這句話 The value of x div y is the value of x/y rounded in the direction of zero to the nearest integer. 因為先前我看某網頁說 div 會四捨五入,所以就以為這句英文是 同樣意思,沒再深究,但現在再仔細看一清楚,div 真的傳回商, 這次真怪我只看說明,沒有打程式來實際測試,真是見怪了!
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-07 17:30:44 IP:61.221.xxx.xxx 未訂閱
cancer 你好: 試試 TRUNC(11/200)
------
======================
昏睡~
不昏睡~
不由昏睡~
系統時間:2024-05-08 8:40:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!