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

如何指定小數點位數及四捨五入

尚未結案
TsannTay
一般會員


發表:20
回覆:34
積分:10
註冊:2003-04-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-10 23:29:16 IP:140.118.xxx.xxx 未訂閱
本人在撰寫讀取*.txt程式時,雖可取得資料並指定為浮點數, 但與原始資料不符,例如: 原始:12.81 讀取資料:12.810000015 原始:10.15 讀取資料:10.149996548 為什麼會這樣呢? 是否需要四捨五入的方式呢?還是其他.... 請各位先進幫忙! PS:資料以fscanf(fp1,"%f",&matrix[i][j])讀取 顯示以Form1->RichEdit2->Text=Form1->RichEdit2->Text matrix[i][j];
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-11 00:11:21 IP:61.216.xxx.xxx 未訂閱
改成以下 fscanf(fp1,"%5.2f",&matrix[i][j]) 5 位數,含小數點,小數點取到第 2 位,向右對齊 如果要向左對齊,改成 - 的 fscanf(fp1,"%-5.2f",&matrix[i][j])
Royce520
高階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-11 00:54:23 IP:61.216.xxx.xxx 未訂閱
其實 這事 bcb 程式處理浮點數的小問題, 也可以這樣解決    double fVar1;    fscanf(fp1,"%lf", &fVar1); // 注意是 %lf ... // 然後再轉入你的變數 或轉型    試試吧 這是我的經驗談喔 
------
不要忘記呼吸,不要忘記編程! ∩__∩
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-11 01:12:40 IP:61.216.xxx.xxx 未訂閱
還有一招    用 FloatToStrF 直接將浮點數格式化輸出成字串格式也很酷喔  說明如下:
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-11 15:02:24 IP:218.160.xxx.xxx 未訂閱
我覺得float的字典裡沒有12.81和10.15(其實還有很多數字),而它所能做的也只能把它所能表示的最接近的數字填上去, 假如你想原汁原味就用char去讀, 要不然就是顯示時指定數字的Format.
TsannTay
一般會員


發表:20
回覆:34
積分:10
註冊:2003-04-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-11 17:27:24 IP:140.118.xxx.xxx 未訂閱
引言: 還有一招 用 FloatToStrF 直接將浮點數格式化輸出成字串格式也很酷喔 說明如下: >,原始程式如下所示。 >DefaultExt = "txt">FileName = "*.txt"; if (OpenDialog1->Execute()) { file_name=OpenDialog1->FileName; s=file_name.c_str(); fp=fopen(s,"r"); } while(!feof(fp)) { fscanf(fp,"%f",&value); temp=FloatToStrF(value,ffFixed,5,3); RichEdit1->Text=RichEdit1->Text temp " "; } fclose(fp); }
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-11 19:20:48 IP:61.216.xxx.xxx 未訂閱
TsannTay 你的需求是什麼呢,依小弟的經驗 BCB 可以精確到小數以下 15 位,手上沒有你的 TXT 檔資料所以無法幫你測試喔!
TsannTay
一般會員


發表:20
回覆:34
積分:10
註冊:2003-04-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-11 19:35:00 IP:140.118.xxx.xxx 未訂閱
引言: TsannTay 你的需求是什麼呢,依小弟的經驗 BCB 可以精確到小數以下 15 位,手上沒有你的 TXT 檔資料所以無法幫你測試喔! %%%%%%%%%%%%%%%%%% China Join,你好: 我的目的是將資料讀取做數值分析, 但所讀取的與原始的資料不一, 使我的程式在演算後有些許的誤差, 至於顯示於視窗的部份已經解決了. 這個問題不知各位先進有何見解? 原始資料為 2.81 11.76 12.09 12.58 12.93 12.23 10.59 10.51 10.5 11.03 11.23 11.04 9.67 10.41 9.59 4.33 4.57 3.93 %%%%%%%%%%%%%%%%%%%%
Royce520
高階會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-11 20:21:39 IP:61.59.xxx.xxx 未訂閱
TsannTay,   不知道你試過我的方法沒有, 這個方法是我在常在用的方法.   fscanf(fp1,"%lf", &fVar1); // 注意是 %lf      尤其再你要將數值轉存到 float 變數時. try try  *真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
TsannTay
一般會員


發表:20
回覆:34
積分:10
註冊:2003-04-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-11 21:10:51 IP:140.118.xxx.xxx 未訂閱
引言: TsannTay, 不知道你試過我的方法沒有, 這個方法是我在常在用的方法. fscanf(fp1,"%lf", &fVar1); // 注意是 %lf 尤其再你要將數值轉存到 float 變數時. try try *真實的事物最美, 簡單的道理最好, 我能體會的 太少* %%%%%%%%%%%%%%%%%%%%%%%%%% >< face="Verdana, Arial, Helvetica">
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-11 21:49:38 IP:61.216.xxx.xxx 未訂閱
1.讀取的時候不要用浮點數讀,直接用字串讀進來,然後用空白分開    2.將字串轉為浮點數再作你要的運算    你試試看行不行 
Royce520
高階會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-04-11 22:01:43 IP:61.59.xxx.xxx 未訂閱
TsannTay,   我測試過你的程式了, 沒有什麼問題啊, 我現在不懂你的問題了   你所謂的 "所讀的數值仍無法與輸出值相同" 是什麼意思呢?   我程式跑出來的結果是     2.810 11.760 12.090 12.580 12.930 12.230 10.590 10.510 10.500 11.030 11.230 11.040 9.670 10.410 9.590 4.330 4.570 3.930       你說明一下 哪不合理好了  *真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
TsannTay
一般會員


發表:20
回覆:34
積分:10
註冊:2003-04-10

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-04-11 23:14:34 IP:140.118.xxx.xxx 未訂閱
引言: TsannTay, 我測試過你的程式了, 沒有什麼問題啊, 我現在不懂你的問題了 你所謂的 "所讀的數值仍無法與輸出值相同" 是什麼意思呢? 我程式跑出來的結果是 2.810 11.760 12.090 12.580 12.930 12.230 10.590 10.510 10.500 11.030 11.230 11.040 9.670 10.410 9.590 4.330 4.570 3.930 你說明一下 哪不合理好了 *真實的事物最美, 簡單的道理最好, 我能體會的 太少* **************************** >>>>>< face="Verdana, Arial, Helvetica">
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-04-11 23:25:05 IP:203.204.xxx.xxx 未訂閱
引言: RichEdit1->Text=RichEdit1->Text value " ";
TsannTay, 您好 如果改為這樣呢?? RichEdit1->Text=FloatToStrF(RichEdit1->Text.ToDouble(),ffFixed,5,3) value " "; 這樣是不是您要的結果呢?? 發表人 - tech_state 於 2003/04/11 23:32:34
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-04-12 00:09:42 IP:61.216.xxx.xxx 未訂閱
依小弟的方法直接讀取字串,那麼讀出來的值絕對和文字檔的一樣,那麼剩下的就應該是字串轉浮點數的問題,如同你一開始所說的看要精確到幾位數計算過後把他四捨五入就好啦,還有啥問題ㄋ ?? 
Royce520
高階會員


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

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-04-12 00:46:12 IP:61.59.xxx.xxx 未訂閱
TsannTay 你好,   終於清楚你的問題了, 其實這是bcb 在轉輸出的字串時的小問題,   其實不該會影響到你的計算結果, 只是顯示上 看起來不舒服罷了  我將你的程式碼改成如下, 就沒你說的哪的問題了 { >DefaultExt = "txt">FileName = "*.txt"; if (OpenDialog1->Execute()) { file_name=OpenDialog1->FileName; s=file_name.c_str(); fp=fopen(s,"r"); } double fXfer; while(!feof(fp)) { fscanf(fp,"%f",&value); char vXfer[64]; // 1 sprintf(vXfer, "%g", value); // 2 RichEdit1->Text=RichEdit1->Text vXfer " "; // 3 } fclose(fp); } *真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
TsannTay
一般會員


發表:20
回覆:34
積分:10
註冊:2003-04-10

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