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

請問一個運算的問題!

尚未結案
小禹
一般會員


發表:8
回覆:10
積分:3
註冊:2002-12-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-10 23:28:15 IP:140.124.xxx.xxx 未訂閱
大家好 Float a = 11; float b = 3; float c =0; c = a/b; 問題是: c = 3.666666666 如果我只想取到小數第3位或第4位 我該如何做呢 ?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-11 00:02:01 IP:140.135.xxx.xxx 未訂閱
小禹您好:    試試FormatFloat("0.000",c);//小數點下3位    順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
Royce520
高階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-11 01:04:49 IP:140.126.xxx.xxx 未訂閱
小禹 你好,   如果你需要 直接轉成數值(不是字串)   我也提供一個方法, :p    #include 〈math.h〉 ... double a = 3.666666666; double trunc = 0.001; // 或 0.0001    double result = a - fmod(a, trunc);    值就是 3.666 <><>*真實的事物最美, 簡單的道理最好, 我能體會的 太少* 發表人 - royce520 於 2003/06/11 01:06:04
------
不要忘記呼吸,不要忘記編程! ∩__∩
小禹
一般會員


發表:8
回覆:10
積分:3
註冊:2002-12-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-11 01:57:18 IP:140.124.xxx.xxx 未訂閱
formatfloat("0.000",c) 輸出值是字串吧 我要的是數值(float)
小禹
一般會員


發表:8
回覆:10
積分:3
註冊:2002-12-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-11 01:59:43 IP:140.124.xxx.xxx 未訂閱
這樣可以嗎? String s = FormatFloat("0.000",c); c = StrToInt(s); 還有謝謝各位解答喔
Royce520
高階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-11 02:06:53 IP:140.126.xxx.xxx 未訂閱
小禹 你好,   你這樣寫當然可以啊 String s = FormatFloat("0.000",c); c = StrToFloat(s); 不過如果 只是數值, 所以可以這樣 float a = 3.666666666; float trunc = 0.001; // 或 0.0001 float result = a - fmod(a, trunc); 至於如果出現了些許小誤差... 原因是bcb 內部處理數值的小問題, 所以我建議你用 double 處理, 比較好 *真實的事物最美, 簡單的道理最好, 我能體會的 太少* 發表人 - royce520 於 2003/06/11 02:15:03
------
不要忘記呼吸,不要忘記編程! ∩__∩
deal
一般會員


發表:6
回覆:33
積分:22
註冊:2003-04-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-11 08:27:32 IP:163.29.xxx.xxx 未訂閱
引言: 大家好 Float a = 11; float b = 3; float c =0; c = a/b; 問題是: c = 3.666666666 如果我只想取到小數第3位或第4位 我該如何做呢 ?
我也提供一個方法,但會進行四捨五入: c = RoundTo(c, -3) 這樣就能得到3.667
lo
初階會員


發表:8
回覆:69
積分:25
註冊:2003-01-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-11 09:39:57 IP:211.76.xxx.xxx 未訂閱
sprintf(buff,"%.2f",c); // %.2f 小數點
小禹
一般會員


發表:8
回覆:10
積分:3
註冊:2002-12-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-11 11:23:07 IP:140.124.xxx.xxx 未訂閱
c = RoundTo(c, -3); 出現錯誤信息 [C Error] Restoration.cpp(420): E2268 Call to undefined function 'RoundTo' 我有include math.h 阿!式什麼原因呢?
deal
一般會員


發表:6
回覆:33
積分:22
註冊:2003-04-07

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-11 12:44:17 IP:163.29.xxx.xxx 未訂閱
引言: c = RoundTo(c, -3); 出現錯誤信息 [C Error] Restoration.cpp(420): E2268 Call to undefined function 'RoundTo' 我有include math.h 阿!式什麼原因呢?
是Math.hpp才對
小禹
一般會員


發表:8
回覆:10
積分:3
註冊:2002-12-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-11 14:05:04 IP:140.124.xxx.xxx 未訂閱
不知道為什麼 跑出來的值竟然是 3.670000002
deal
一般會員


發表:6
回覆:33
積分:22
註冊:2003-04-07

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-06-11 14:19:52 IP:163.29.xxx.xxx 未訂閱
引言: 不知道為什麼 跑出來的值竟然是 3.670000002
再檢查看看,我跑過沒問題啊
小禹
一般會員


發表:8
回覆:10
積分:3
註冊:2002-12-25

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-06-11 14:27:36 IP:140.124.xxx.xxx 未訂閱
float c = 3.66666666; c = RoundTo(c,-4); Label1->Caption = c; // c = 3.66669988632202 若改成 double c = 3.66666666; c = RoundTo(c,-4); Label1->Caption = c; // c = 3.6667 我想我是試出來了 但是就是不知道為什麼??????
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-06-11 19:12:24 IP:61.231.xxx.xxx 未訂閱
引言: float c = 3.66666666; c = RoundTo(c,-4); Label1->Caption = c; // c = 3.66669988632202 若改成 double c = 3.66666666; c = RoundTo(c,-4); Label1->Caption = c; // c = 3.6667 我想我是試出來了 但是就是不知道為什麼??????
因為 double 是用 8 bytes 來存資料而 float 只用 4 bytes 來存資料,當然精確度是以 double 較高, float 只能用來「粗算」、要求運算速度快又不需要太準時使用,如果要「精算」要求較高的精確度,要使用 double ,如果覺得 double 還不夠,可以用 long double ,long double 是用 10 bytes 來存資料的, long double 在 Delphi 中是 Extended ,您可以看到許多內建(來自 Delphi) 的函式都是用 Extended 而不是 double 或 float,就是因為怕損失精確度。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
系統時間:2024-04-30 0:12:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!