[C#]格式化字串

摘要:格式字串

基礎常用格式化字串 :

經常會需要使用到字串的組合,記得就讀大學時,就常用運算子(+),將字串組合,並且非常喜愛運算子幫助自動轉換為字串,不過發現閱讀上不太容易,另外就是造成資源與效能的浪費,在字串這篇中有提到String object的特性,但有些時候,字串是固定不變,只是需要作組合,此時就可以用到格式化字串string.Format();


            string headerText = "Dear jerry:";
            string context = "My english is poor!";
            string footText = "Thanks & Regards,jerry";

            string mail = string.Format("標頭{0}\n內容:{1}\n\t{2}",
                                            headerText,
                                                context,
                                                    footText);
            Console.WriteLine(mail);

Output :

2012-04-25_224512

這個範例不太好,因為Console.WriteLine()也可以如同string.Format()一樣可以放位置引數,並且對應參數列相對值。

.NET Framework還提供許多格式化的格式,以下展現貨幣與取到小數第二位

 


            double number = 55212.1154;

            Console.Write("原數值:{0},貨幣:{0:C0},\n"+
                           "取到小數二位:{0:F2}", number);

Output :

2012-04-25_225556

 

談到小數點就不能不提到in91哥寫那篇,在這篇當中完整說明相關的差異,可依照需求調整使用的格式化格式,在該文章結尾也提到一點個人認為也常用到的東西,就是既然轉成特殊的格式,總是會需要再取回作其他處理。

 

比較常用的時間格式化為字串:


            DateTime date =  DateTime.Now;

            string NowDateTime = date.ToString();
            Console.WriteLine("現在日期時間:" + NowDateTime);

            string zhTWDate = date.ToString("D");
            Console.WriteLine("本機標準日期:" + zhTWDate);

            string shortDate = date.ToString("d"); //DateTime.Now.ToShortDateString();
            Console.WriteLine("現在西元日期:" + shortDate);

            string ShortTime = date.ToString("t"); //DateTime.Now.ToShortTimeString();
            Console.WriteLine("現在時間" + ShortTime);

            string NowTime = date.ToString("T");
            Console.WriteLine("本機標準時間:" + NowTime);

Output :

2012-04-25_215741

自訂格式化 :


            DateTime date =  DateTime.Now;

            string customerDateTime = date.ToString("yyyy/MM/dd hh:mm;ss");
            Console.WriteLine("現在日期時間:" + customerDateTime);

Output :

2012-04-25_220231

這幾個範例下來,有沒有發現缺了星期幾,在自訂格式化可以使用dddd


            string customerDateTime = date.ToString("dddd");
            Console.WriteLine("今天是:" + customerDateTime);

Output :

2012-04-25_220445

 

文化特性

Allen於留言中提到的文化特性,這真的是我從來也沒想到,很直覺就覺得應該用本地化,而為何會自動本地化,伺服器如果設定不是台灣,那我能控制想要的文化版本嗎?如果不行這設計的美德,就變成一種負擔,所以當然可以改變。上課時,Allen也提到微軟有這樣的設計,那自己在設計工具時,當然也可以有,當時就感到納悶,那自己要怎麼設計?(實作某介面)

其實使用ToString時,如果要設定當地的文化,必須宣告CultureInfo 類別,來設定所要的文化。以下範例在不設定的情況下為當地的文化,所以顯示出來為NT。1


            decimal number = 5000M;
            string tw = number.ToString("C");
            Console.WriteLine(tw);

2012-04-25_222113

但現在跟日本樂天合作,所以在日文版上,不能出現NT,當然要轉成日本當地的貨幣符號(先排除貨幣匯率與換算)


            CultureInfo MyCulture = new CultureInfo("ja-JP");
            decimal number = 5000;
            string jp = number.ToString("C", MyCulture);
            Console.Write(jp);

Output :

2012-04-25_222809

CultureInfo 類別透過這個類別可以設定文化特性(地區設定),來展現所需要的文化特性的格式。

 

結語:

標題自訂格式化可能會讓人誤解,可能會誤認為是類似西元轉民國的自訂格式化,不過功力還不到,期望未來自己也可以寫一篇C#版,格式化字串也經常用到,在完成這篇筆記,也發現許多以往不知道的事情與一些可以簡單化的方法,不用自己寫一堆,其實人家都已經寫好了,另外,格式化字串在Grid中也非常好用,產生報表時,可以直接顯現出想要的格式。

 

MSDN  Library Reference :

標準數值格式字串
文化特性
字串格式化範例 for vb

 

Reference :

Allen blog 文化特性

in91 blog 數字格式

Allen blog 數字格式

.NET 隨筆 格式化相關整理

 

Other

格式化小運用

 

 

 

 

 

 

 

註1:使用decimal,適合財務或貨幣計算,另外,decimal為十進位,float為二進位計算上會有差異。

 

如文章有錯誤,煩請告知,新人發帖請多包涵

 

創用 CC 授權條款