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

浮點數值不一樣?怎麼辦

答題得分者是:RaynorPao
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-17 03:22:26 IP:211.72.xxx.xxx 未訂閱
大家好: 請問..  
 
 float a_AVG = 0.42067810813;
 Label1->Caption=(a_AVG);      
爲什麼秀出來的值變成0.420678108930588???? 如果是>< 嗚~請多幫忙唷!
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
RaynorPao
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-17 08:35:44 IP:203.73.xxx.xxx 未訂閱
引言: 大家好: 請問..
 
 float a_AVG = 0.42067810813;
 Label1->Caption=(a_AVG);      
爲什麼秀出來的值變成0.420678108930588???? 如果是>< 嗚~請多幫忙唷! < face="Verdana, Arial, Helvetica"> smilebye 你好: 請參考以下的範例程式碼 < class="code"> #include "stdio.h" void __fastcall TForm1::Button1Click(TObject *Sender) { double dd=0.42067810813; Label1->Caption=FloatToStr(dd); char szTemp[256]={0}; sprintf(szTemp, "%.5G", dd); Label2->Caption=(AnsiString)szTemp; } 備註: 也可以利用本站的搜尋功能,關鍵字「FloatToStrF」 -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/02/17 10:52:08
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-17 09:27:41 IP:210.201.xxx.xxx 未訂閱
請教 包子大大 為什麼float會有如此狀況產生呢? 而double並不會有.... ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-17 16:44:32 IP:61.230.xxx.xxx 未訂閱
GaryKao99 你好,   哪是因為 float, double 有不同的精確度的關係    Type        Range        Significant digits        Size in bytes -------------------------------------------------- float        1.5 x 10^?5 .. 3.4 x 10^38            7-8 4 double 5.0 x 10^?24 .. 1.7 x 10^308 15-16 8 所以 你觀察一下你的數值 就可以了解的 *真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-17 17:33:33 IP:211.72.xxx.xxx 未訂閱
引言: GaryKao99 你好, 哪是因為 float, double 有不同的精確度的關係 Type Range Significant digits Size in bytes -------------------------------------------------- float 1.5 x 10^?5 .. 3.4 x 10^38 7-8 4 double 5.0 x 10^?24 .. 1.7 x 10^308 15-16 8 所以 你觀察一下你的數值 就可以了解的 *真實的事物最美, 簡單的道理最好, 我能體會的 太少*
我的數值在小數點之後第10位開始有誤差 你上面的float是不是精確到10的-5次阿? 那個問號是負號嗎? 順便謝謝大家熱心的回答 我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-18 08:16:06 IP:61.230.xxx.xxx 未訂閱
smilebye 你好,   sorry 因為我從 help 文件上 copy 轉貼上來   所以出現了亂掉的現象  我又沒有全部把它修正好   在貼一次(你可以查 Real Types)    ps. 我重算了了數據, 讓他更精確點    Type |Range |Significant digits |Size in bytes -------------------------------------------------- float 1.40 x 10^-45 .. 3.40 x 10^38 7-8 4bytes double 4.49 x 10^-324 .. 1.79 x 10^308 15-16 8bytes 紅色部分是 有效位數, 就是表示成科學符號時 小數點後面 有意義的數字位數 一個IEEE的浮點數在電腦中的表示方式 是由三個部份組成 (1) 正負號(sign-magnitude bit) (2) 指數(exponent bits) (2) 尾數(fraction bits) 它們各使用多少位元, 則要看不同系統等的設計而定 IEEE 745 定義的 floating point 也就是 BCB 的 float or double 方式, 你可以參考 http://www.psc.edu/general/software/packages/ieee/ieee.html *真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

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