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

四捨五入要怎麼做

尚未結案
fgchiu
一般會員


發表:6
回覆:5
積分:2
註冊:2003-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-06 08:46:02 IP:61.231.xxx.xxx 未訂閱
請問一下BCB裡有round 嗎?? 在BCB裡要怎麼四捨五入 我要做計算發票稅金的小form 從Edit輸入的值*0.05 填入另一個Edit Int 好像不能*0.05 只能*5/100,但這好像會直接捨去 而將輸入的值StrToFloat*0.05在小後點五六位會出現很多位不規則小數 然後Float 不能直接轉Int 的樣子 這個在BCB該怎麼解決??
kelon
一般會員


發表:17
回覆:27
積分:18
註冊:2002-07-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-06 09:24:14 IP:211.20.xxx.xxx 未訂閱
Edit2->Text=Edit1->Text.ToDouble()*0.05; 應該可以吧 
tech_state
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-06 10:09:49 IP:61.221.xxx.xxx 未訂閱
引言: 請問一下BCB裡有round 嗎?? 在BCB裡要怎麼四捨五入 我要做計算發票稅金的小form 從Edit輸入的值*0.05 填入另一個Edit Int 好像不能*0.05 只能*5/100,但這好像會直接捨去 而將輸入的值StrToFloat*0.05在小後點五六位會出現很多位不規則小數 然後Float 不能直接轉Int 的樣子 這個在BCB該怎麼解決??
fgchiu, 您好 試試下面的方式吧
 Edit1->Text = FloatToStrF(Edit2->Text.ToDouble() * 0.05 , ffFixed, 9, 2);
 
如此可以得到小數點後二位。 ======================= 是非終日有,不聽自然無 天下本無事,庸人自擾之
Ming Lin
一般會員


發表:27
回覆:53
積分:21
註冊:2003-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-06 11:32:20 IP:61.222.xxx.xxx 未訂閱
fgchiu, 您好 你試試用*5.00/100.00 可取到小數點第二位 ~~GOOD LUCK~~
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-06 13:22:16 IP:61.59.xxx.xxx 未訂閱
我想到一個比較原始的方法,加0.5做四捨五入     
 float   ratio = 0.05;
 int     int_value;
 
 int_value = (int)(StrToFloat(Edit1)*ratio   0.5);
 
這樣做會不會有點笨? 請見諒
Royce520
高階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-06 13:44:02 IP:61.216.xxx.xxx 未訂閱
fgchiu 你好,    C 標準函式庫裡面 我印象中好像沒有提供四捨五入的函數,    有一些 像 floor, ceil 等的, 我提供你一個我寫的給你    double Precise(double value, const int Nth) // Nth 準確到小數點位數 {     double fDom = pow(10, Nth);     value = floor(value * fDom + 0.5);     return value / fDom; }    ps. JerryKuo 你的方法並不笨喔  <><>*真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
WhiteFang
一般會員


發表:9
回覆:23
積分:6
註冊:2002-11-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-06 17:59:15 IP:163.28.xxx.xxx 未訂閱
引言: 我想到一個比較原始的方法,加0.5做四捨五入
 float   ratio = 0.05;
 int     int_value;
 
 int_value = (int)(StrToFloat(Edit1)*ratio   0.5);
 
這樣做會不會有點笨? 請見諒
我平常也是這樣做的...... 但是若是負數就會有問題了..... 因此還要加上 -的判斷才行....
swordsman
一般會員


發表:8
回覆:22
積分:6
註冊:2003-03-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-07 18:22:22 IP:140.138.xxx.xxx 未訂閱
順便請教一個問題,譬如我想取一變數取小數點下2位,其餘無條件捨去,該怎麼做啊? 我的測試的作法是: void __fastcall TForm1::Button5Click(TObject *Sender) { String a=Memo1->Text; float a1=StrToFloat(a); int b=a1*100; float v = b/100; Memo2->Text=v; } 結果: Memo1=3.9238 Memo2=3 把 float v = b/100; 改100.0 Memo2=3.92000007629395 請問該怎麼做啊? 我事過前面的方式,但還是有後面數字000007629395... 是Memo格式關係嗎?雖然StrToF可以達成目標,但在我的應用上會多一些VCL 增加硬體負擔...(因為要先float轉String再將String轉成format Float) 實際變數v會如此嗎? 謝謝 發表人 - swordsman 於 2003/05/07 18:37:32 發表人 - swordsman 於 2003/05/07 19:40:56
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-07 19:02:50 IP:61.59.xxx.xxx 未訂閱
引言: 順便請教一個問題,譬如我想取一變數取小數點下2位,其餘無條件捨去,該怎麼做啊? 我的測是的作法是: void __fastcall TForm1::Button5Click(TObject *Sender) { String a=Memo1->Text; float a1=StrToFloat(a); int b=a1*100; 改成 int b = (int)(a1*100.0); 呢? float v = b/100; Memo2->Text=v; } 結果: Memo1=3.9238 Memo2=3 把 float v = b/100; 改100.0 Memo2=3.92000007629395 請問該怎麼做啊? 我是過前面的方式,但還是有後面數字000007629395... 是Memo格式關係嗎? 實際變數v會如此嗎? 謝謝 發表人 - swordsman 於 2003/05/07 18:37:32
swordsman
一般會員


發表:8
回覆:22
積分:6
註冊:2003-03-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-07 19:55:52 IP:140.138.xxx.xxx 未訂閱
引言: [quote] 順便請教一個問題,譬如我想取一變數取小數點下2位,其餘無條件捨去,該怎麼做啊? 我的測是的作法是: void __fastcall TForm1::Button5Click(TObject *Sender) { String a=Memo1->Text; float a1=StrToFloat(a); int b=a1*100; 改成 int b = (int)(a1*100.0); 呢? float v = b/100; Memo2->Text=v; } ------------------------ 修改後還是如此3.92000007629395.... 如果真的用StrToF之後,轉回c_str()又會錯啦...
< >< >
builder78
初階會員


發表:36
回覆:100
積分:47
註冊:2003-02-03

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-08 14:37:23 IP:211.76.xxx.xxx 未訂閱
問: 想取一變數取小數點下2位,其餘無條件捨去,該怎麼做啊?    答: 說實話 C 的float型態 實在是一個"爛型態" 不精準又常常禿槌~ 最好把它忘了 改用double型態 void __fastcall TForm1::Button1Click(TObject *Sender) { double a1 = StrToFloat(Edit1->Text); //Edit1->Text="123.3488" double v = int(a1*100)/100.0; //v=123.34 Edit2->Text = v; //Edit2->Text="123.34" } ********************************************************* 有系統的知識才是力量
swordsman
一般會員


發表:8
回覆:22
積分:6
註冊:2003-03-04

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-12 13:26:20 IP:140.138.xxx.xxx 未訂閱
太棒了,感謝你解答我的疑惑... 我以後就用double來運算吧!!
系統時間:2024-05-03 14:32:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!