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

Double 轉換為 String 時,不希望自動把尾數的0捨去

答題得分者是:HikaruGo
cuteman0725
一般會員


發表:7
回覆:6
積分:2
註冊:2007-09-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-08 15:58:41 IP:220.135.xxx.xxx 訂閱
各位大大們好:

最近剛開始學 C# 程式﹙以前是寫 Delphi﹚,碰到一些問題

在轉換 Double 為字串時,C#會很"自動"的捨去尾數 ".00"的值,但我希望不要這樣

EX:

double x = 51.0
string s = x.ToString();

/*
s 轉換後 => "51",
但我希望是 s => "51.0"

如果 x = 51.00 ,則 s=> "51.00"
x = 51.000,則 s=> "51.000"
*/

目前試過用

string s = x.ToString("2F") <= 可以成功,但是小數位數是固定的﹙我希望小數位數可以任意變動﹚
string s = x.ToString("###.###") <= 失敗
string s = String.Format("{0}", x); <= 失敗


請大大們幫忙了,感謝~~
HikaruGo
中階會員


發表:22
回覆:69
積分:88
註冊:2007-12-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-08 20:21:22 IP:61.64.xxx.xxx 訂閱


系統如何知道 Double x= 1 or 1.0 or 1.0000 ?

除非你已知 ,若已知
把紅色替換掉不就是答案了嗎?



字元說明範例輸出
C 或 c 貨幣 Console.Write("{0:C}", 2.5); Console.Write("{0:C}", -2.5); $2.50 ($2.50)
D 或 d 十進位 Console.Write("{0:D5}", 25); 00025
E 或 e 科學記號 Console.Write("{0:E}", 250000); 2.500000E 005
F 或 f 固定點 Console.Write("{0:F2}", 25); Console.Write("{0:F0}", 25); 25.00 25
G 或 g 一般 Console.Write("{0:G}", 2.5); 2.5
N 或 n 數值 Console.Write("{0:N}", 2500000); 2,500,000.00
X 或 x 十六進位 Console.Write("{0:X}", 250); Console.Write("{0:X}", 0xffff); FA FFFF







===================引 用 cuteman0725 文 章===================
各位大大們好:

最近剛開始學 C# 程式﹙以前是寫 Delphi﹚,碰到一些問題

在轉換 Double 為字串時,C#會很"自動"的捨去尾數 ".00"的值,但我希望不要這樣

EX:

double x = 51.0
string s = x.ToString();

/*
s 轉換後 => "51",
但我希望是 s => "51.0"

如果 x = 51.00 ,則 s=> "51.00"
x = 51.000,則 s=> "51.000"
*/

目前試過用

string s = x.ToString("2F") <= 可以成功,但是小數位數是固定的﹙我希望小數位數可以任意變動﹚
string s = x.ToString("###.###") <= 失敗
string s = String.Format("{0}", x); <= 失敗


請大大們幫忙了,感謝~~
cuteman0725
一般會員


發表:7
回覆:6
積分:2
註冊:2007-09-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-09 11:28:46 IP:220.135.xxx.xxx 訂閱
感謝樓上大大的回覆~~

但是小弟目前碰到的情形是,事先不會知道它有幾位數,所以是否有辦法在 double 不轉成 String 的情況下就能夠取得小數位數?

我會提出這個需求的原因是,因為 C# 在 Debug模式,設監看式時,可以很明確的取得 double x = 51.00﹙或 51.000﹚~

但是一旦轉成 String ,就變成 51 了。所以有點好奇 Visual Studio 是怎麼做到的?
shunchia63
高階會員


發表:26
回覆:141
積分:198
註冊:2007-05-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-09 12:10:39 IP:61.62.xxx.xxx 訂閱
編輯記錄
shunchia63 重新編輯於 2008-05-09 12:11:51, 註解 無‧
HikaruGo
中階會員


發表:22
回覆:69
積分:88
註冊:2007-12-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-05-09 15:24:37 IP:61.62.xxx.xxx 訂閱
test code ..
double d = 1.000d; --> debug view 1.0
double ds = 1.001d; --> debug view 1.001
double dss = 1d; --> debug view 1.0






double x = 51.00﹙或 51.000﹚~


你的Code是如何寫的?




===================引 用 cuteman0725 文 章===================
感謝樓上大大的回覆~~

但是小弟目前碰到的情形是,事先不會知道它有幾位數,所以是否有辦法在 double 不轉成 String 的情況下就能夠取得小數位數?

我會提出這個需求的原因是,因為 C# 在 Debug模式,設監看式時,可以很明確的取得 double x = 51.00﹙或 51.000﹚~

但是一旦轉成 String ,就變成 51 了。所以有點好奇 Visual Studio 是怎麼做到的?
cuteman0725
一般會員


發表:7
回覆:6
積分:2
註冊:2007-09-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-05-10 01:10:57 IP:203.67.xxx.xxx 訂閱
To HikaruGo 大大:

不好意思,是我搞錯了~~

那個值是用元件﹙一個模擬 EXCEL 的元件﹚傳回的,型態不是 double,而是一個 object。

會問這個問題只是不想再在 VBA 上寫了 Code 之後,又要再 C# 上重寫一次,在VBA上己經指定過小數位數了,希望能直接傳完整的值過來。

不過看起來還是有必要將小數位數的顯示重新指定了,還是感謝大大的回覆,這個問題就到此結案了~
系統時間:2024-05-06 9:40:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!