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

請問int的正確用法

答題得分者是:Stallion
todaynow
一般會員


發表:2
回覆:4
積分:1
註冊:2007-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-03 12:08:24 IP:220.130.xxx.xxx 訂閱
各位大大:
遇到一個很怪的東西…麻煩幫忙解一下
procedure TForm1.Button1Click(Sender: TObject);
var k,Result:Real;
begin
k:=3.21;
result:=int(k*100);
showmessage(FloatToStr(result));
end;
得到的答案竟然變成320(應該是321才對吧!??)
------
**************************
努力在delphi的世界中......
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-03 12:53:08 IP:155.94.xxx.xxx 訂閱
 提問的智慧

你已經問過一樣的問題(浮點數型態的差異???)了,如果還不會解,那麼就搜尋吧..
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
編輯記錄
Coffee 重新編輯於 2007-06-03 12:54:46, 註解 無‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-03 13:00:25 IP:211.22.xxx.xxx 未訂閱
這牽扯到浮點數在與整數運算前,Compiler捨去浮點數位數(捨位的算法又有不同),所以在運算前Programmer要自行轉換與指定精度!
<textarea cols="60" rows="10" class="delphi" name="code"> unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,Math, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var k,Result:Real; begin k:=3.21; SetRoundMode(rmUp); //說明太長,請自行查線上說明 Result:=int(Roundto(k,-2)*100); //RoundTo請自行查線上說明 Showmessage(FloatToStr(Result)); end; end. </textarea>
===================引 用 todaynow 文 章===================
各位大大:
遇到一個很怪的東西…麻煩幫忙解一下
procedure TForm1.Button1Click(Sender: TObject);
var k,Result:Real;
begin
k:=3.21;
result:=int(k*100);
showmessage(FloatToStr(result));
end;
得到的答案竟然變成320(應該是321才對吧!??)
todaynow
一般會員


發表:2
回覆:4
積分:1
註冊:2007-04-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-04 08:52:38 IP:220.130.xxx.xxx 訂閱
感謝上面大大的回答~
關於不懂的SetRoundMode和Roundto,我會去查查的~
------
**************************
努力在delphi的世界中......
todaynow
一般會員


發表:2
回覆:4
積分:1
註冊:2007-04-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-04 19:57:41 IP:220.130.xxx.xxx 訂閱
各位大大:
不好意思吶~~
後來又有一個奇怪的問題發生了~~
照理說因為浮點數有誤差所以應該每次都會有問題,但為什麼有時候又是正常的呢?
舉例:
procedure TForm1.Button1Click(Sender: TObject);
var k,Result:Real;
begin
k:=3.21;
result:=int(k*100);
showmessage(FloatToStr(result));
end;
result的值有時候會是因浮點數而產生誤差的320
但有時候又會是我想要的321
不知道是什麼原因會造成這樣的結果呢?
再麻煩各位大大了…
謝謝
------
**************************
努力在delphi的世界中......
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-04 20:03:47 IP:211.22.xxx.xxx 未訂閱
你沒有去看上面的函數說明對不對?
先以裡面RoundTo確定數值的精度,以免跟整數運算時精度被Compiler不預期的縮減了。
一案一問,不要把問題拉的太長了~OK!先結案吧!
===================引 用 todaynow 文 章===================
各位大大:
不好意思吶~~
後來又有一個奇怪的問題發生了~~
照理說因為浮點數有誤差所以應該每次都會有問題,但為什麼有時候又是正常的呢?
舉例:
procedure TForm1.Button1Click(Sender: TObject);
var k,Result:Real;
begin
k:=3.21;
result:=int(k*100);
showmessage(FloatToStr(result));
end;
result的值有時候會是因浮點數而產生誤差的320
但有時候又會是我想要的321
不知道是什麼原因會造成這樣的結果呢?
再麻煩各位大大了…
謝謝
todaynow
一般會員


發表:2
回覆:4
積分:1
註冊:2007-04-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-05 08:42:26 IP:220.130.xxx.xxx 訂閱
是~~大大,我是已經結案了~
但是關於SetRoundMode和Roundto,我按F1想找說明可是沒有(是因為我用的是DELPHI5的關系嗎?)
但還是有上網查了資料,知道了它的用法~~
但我要以大大給的範例RUN的時候會出現找不到Variants.DCU 的錯誤訊息,也是因為版本的關系嗎?
如果要能用SetRoundMode和Roundto是不是要先要有Variants.DCU呢?
------
**************************
努力在delphi的世界中......
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-06-05 19:14:22 IP:211.22.xxx.xxx 未訂閱
還沒結案吧!不會結案嗎?看看這裡~
http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=88169

Delphi5我沒用過,我是用Delphi7,查詢關鍵字的方法,是將滑鼠游標停留在想要查的方法或函數上面,然後才按F1。
===================引 用 todaynow 文 章===================
是~~大大,我是已經結案了~
但是關於SetRoundMode和Roundto,我按F1想找說明可是沒有(是因為我用的是DELPHI5的關系嗎?)
但還是有上網查了資料,知道了它的用法~~
但我要以大大給的範例RUN的時候會出現找不到Variants.DCU 的錯誤訊息,也是因為版本的關系嗎?
如果要能用SetRoundMode和Roundto是不是要先要有Variants.DCU呢?
系統時間:2024-05-02 20:15:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!