四捨五入要怎麼做 |
尚未結案
|
fgchiu
一般會員 ![]() ![]() 發表:6 回覆:5 積分:2 註冊:2003-04-15 發送簡訊給我 |
|
kelon
一般會員 ![]() ![]() 發表:17 回覆:27 積分:18 註冊:2002-07-22 發送簡訊給我 |
|
tech_state
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
引言: 請問一下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 發送簡訊給我 |
|
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
|
Royce520
高階會員 ![]() ![]() ![]() ![]() 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
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 發送簡訊給我 |
|
swordsman
一般會員 ![]() ![]() 發表:8 回覆:22 積分:6 註冊:2003-03-04 發送簡訊給我 |
順便請教一個問題,譬如我想取一變數取小數點下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 發送簡訊給我 |
引言: 順便請教一個問題,譬如我想取一變數取小數點下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 發送簡訊給我 |
引言: [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 發送簡訊給我 |
問:
想取一變數取小數點下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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |