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

請教浮點數語整數之間運算的問題

尚未結案
kool0318
一般會員


發表:14
回覆:17
積分:6
註冊:2005-01-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-01 17:18:19 IP:220.130.xxx.xxx 未訂閱
aa,bb :integer; cc:double; bb:=aa*cc; 請教各位專家,如果要將aa*cc的結果,整數位以後無條件捨去,的結果丟給bb 要如何做? 有沒有類似 floattoint 的函數? 謝謝
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-01 17:28:36 IP:210.68.xxx.xxx 未訂閱
bb:= round(aa*cc) div 1; 這樣應該就可以了
kool0318
一般會員


發表:14
回覆:17
積分:6
註冊:2005-01-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-01 17:33:49 IP:220.130.xxx.xxx 未訂閱
不好意思請教一下 為什麼還要 div 1
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-01 17:47:09 IP:210.243.xxx.xxx 未訂閱
引言: aa,bb :integer; cc:double; bb:=aa*cc; 請教各位專家,如果要將aa*cc的結果,整數位以後無條件捨去,的結果丟給bb 要如何做? 有沒有類似 floattoint 的函數? 謝謝
procedure TForm1.Button1Click(Sender: TObject);
var
  d1, d2: double;
  i, j: Integer;    begin
  d1 := 10.5143;
  j := 10;      // 先用一個double儲存結果
  d2 := d1 * j;      try
    // 用Trunc截取整數部份
    i := Trunc(d2);
  except
    // 因Integer和Double長度不同, 有可能會轉換失敗
    // Fail to truncates a real number to an integer.
  end;      ShowMessage( IntToStr(i) );
end;    附帶一提, round並非無條件進位, 而是做五捨六入
function Round(X: Extended): Int64;
Returns the value of X rounded to the nearest whole number.
發表人 - zard 於 2005/02/01 17:53:30
stone0924
一般會員


發表:3
回覆:17
積分:14
註冊:2002-08-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-01 19:20:53 IP:211.21.xxx.xxx 未訂閱
Dear All, 由於 Delphi 的 Round 函式是 四捨六入伍成雙 所以我用下列 Function 謝謝!    function rounds(x:double;n:integer):double; overload; function rounds(x:double):integer;overload; implementation function rounds(x:double;n:integer):double; const iX:double=0.0000000001; var factor:double;     i:integer; begin         factor:=1;   if n>0 then     for i:=1 to n do       factor:=factor*10;   if x<0 then result:=round((x-iX)*factor)/Factor else result:=round((x iX)*factor)/factor; end; function rounds(x:double):integer; const iX:double=0.0000000001; begin if x<0 then result:=round(x-iX) else result:=round(x ix); end;
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-02 00:22:39 IP:210.68.xxx.xxx 未訂閱
div 1是為了取整數的部份  div這個函數是取商數用的 mod是取餘數 SORRY...我的答案有一點問題 應該是  bb:= Round((aa*cc) div 1); 可是型態不同一定不能用 但是下面這個偷吃步也可以...    
  if Pos('.', FloatToStr(aa*cc)) > 0 then
    bb:= StrToInt(Copy(FloatToStr(aa*cc), 1, Pos('.', FloatToStr(aa*cc))-1))
  else
    bb:= StrToInt(Copy(FloatToStr(aa*cc), 1, MAXINT));
kool0318
一般會員


發表:14
回覆:17
積分:6
註冊:2005-01-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-02 07:58:24 IP:220.130.xxx.xxx 未訂閱
感謝各位的解答....
系統時間:2024-05-21 17:54:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!