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

把值讀入後,為什麼值改變了?

尚未結案
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-09 22:53:59 IP:61.228.xxx.xxx 未訂閱
11,1080.432639,720.0454965 22,1659.489841,627.5612771 33,1065.125108,1148.730473 44,932.6251452,392.5638725 55,1659.489841,627.5612771 66,940.0833755,843.4946949 77,1455.61918,759.5002553 88,1165.338389,597.3804039 99,1065.884545,1565.0449 上面是我的txt檔中的資料,我把檔案一行一行讀入memo中
 
if(OpenDialog1->Execute())  //讀檔按鈕
{
  Edit5->Text=OpenDialog1->FileName;
  Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
 
//把memo的資料用逗號區分,一個一個取出來
for(int i=0;iLines->Count;i  )   
{
  String strSource=Memo1->Lines->Strings[i];
  AnsiString sz1=strSource;
  AnsiString sz2=StringReplace(sz1, " ", ",", TReplaceFlags()<CommaText=sz2;
  int d1=StrToFloat(sl->Strings[0]); 
  float d2=StrToFloat(sl->Strings[1]);//d1與txt檔案的小數位值不同?
  float d3=StrToFloat(sl->Strings[2]);//d2與txt檔案的小數位值不同    
  delete sl;
}    
結果我檢查,發現d2、d3的值,其小數位的值改變了,但整數位卻相同,為什麼會這樣? 可以解決嗎? 感謝各位兄弟的幫忙哦~~~
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-09 23:24:52 IP:61.221.xxx.xxx 未訂閱
引言: 11,1080.432639,720.0454965 22,1659.489841,627.5612771 33,1065.125108,1148.730473 44,932.6251452,392.5638725 55,1659.489841,627.5612771 66,940.0833755,843.4946949 77,1455.61918,759.5002553 88,1165.338389,597.3804039 99,1065.884545,1565.0449 上面是我的txt檔中的資料,我把檔案一行一行讀入memo中
 
if(OpenDialog1->Execute())  //讀檔按鈕
{
  Edit5->Text=OpenDialog1->FileName;
  Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
 
//把memo的資料用逗號區分,一個一個取出來
for(int i=0;iLines->Count;i++)   
{
  String strSource=Memo1->Lines->Strings[i];
  AnsiString sz1=strSource;
  AnsiString sz2=StringReplace(sz1, " ", ",", TReplaceFlags()<CommaText=sz2;
  int d1=StrToFloat(sl->Strings[0]); 
  float d2=StrToFloat(sl->Strings[1]);//d1與txt檔案的小數位值不同?
  float d3=StrToFloat(sl->Strings[2]);//d2與txt檔案的小數位值不同    
  delete sl;
}    
結果我檢查,發現d2、d3的值,其小數位的值改變了,但整數位卻相同,為什麼會這樣? 可以解決嗎? 感謝各位兄弟的幫忙哦~~~
黑輪 你好: 先試試把 float 改成 double < class="code"> 相關討論文章: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=50398 -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/06/10 00:44:22
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-09 23:26:49 IP:220.143.xxx.xxx 未訂閱
你是怎麼看出不一樣的,我另外用兩個Memo show出結果是一樣的ㄝ
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-09 23:50:48 IP:61.228.xxx.xxx 未訂閱
哇~果然是如此~改成double後,就對了 可是float的位數不是很多嗎?應該夠我用啊!!為什麼會如此? 還有一個問題,就是fprintf時,整數是用%d,float用%f,哪double要用什麼啊? ps:GGL兄,我是進去程式中檢查的,就是除錯~~ 發表人 - 黑輪 於 2004/06/09 23:57:30
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-09 23:57:42 IP:220.143.xxx.xxx 未訂閱
在BCB的說明裡面 float 32BIT 1.18?10^-38 < |X| < 3.40?10^38 Scientific (7-digit) precision) double 64BIT 2.23?10^-308 < |X| < 1.79?10^308 Scientific (15-digit precision) DOUBLE比較大
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-10 00:11:14 IP:61.228.xxx.xxx 未訂閱
對啊,是double比較大,可是我所用的數字差不多在小數點後10位,不是在float的範圍裡嗎?
jimmy_and_you
初階會員


發表:20
回覆:74
積分:33
註冊:2003-05-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-10 12:50:18 IP:61.70.xxx.xxx 未訂閱
浮點數儲存數值是用近似值的方法,所以有時候會跟原來的值(直接輸入的值)有一點點小差距 轉貼以下文章,希望對你有幫助: 為什麼浮點數 (floating point) 這麼不精確?為什麼這段程式不會印出 0.43?            #include main() { float a = 1000.43; float a = 1000.0; cout << a - b << '\n'; } (附註,有些 C 環境下會印出 0.429993) 聲明:受進位/捨位/近似值之苦,其實並不是 C 的問題,而是電腦科學界的問 題。不過還是一直有人在 comp.lang.c 裡發問,所以我給你一個答案意思一下。 答案:浮點數本來就是個近似值。在 IEEE 的 32 位元浮點數標準裡,有 1 位元的 正負號,8 位元的指數,23 位元的假數。因為正規化後的二進位假數都會變成像是 1.xxxxx... 的型式,所以頭一項的 1 不予計入,就能得到 24 位元的有效假數。 1000.43(以及其他很多很多數字)都不是 float 或 double 的表示法,其實 1000.43 的位元內容是這樣子的('s' 代表正負號,'e' 代表指數,'m' 代表假數) : seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm 01000100011110100001101110000101 假數移位後變成 1111101000.01101110000101 或是 1000 7045/16384。 分數部份為 0.429992675781。 float 的假數佔 24 位元,所以你只得到 16M 分之一的精確度。 double 有較高的精確度(53 位元的假數)。
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-06-12 09:31:16 IP:140.124.xxx.xxx 未訂閱
原來浮點數是這麼回事~我明白了 感謝各位大力相助哦~~
系統時間:2024-06-18 21:15:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!