最新回應

  • re: 遮蔽與覆寫 to chingchan : 有時候相同的東西(方法)會整理放到父類別(base),然後讓子類....
  • by HOW
  • re: 遮蔽與覆寫 看到這裡還是不懂Override的作用...如果只要顯示子類別的方法,那為何要去繼承父類別? ....
  • by chingchan
  • re: [C#] Code 小技巧 to HOW ?™ : 數值函數幾乎總是比字符串函數更有效率。
  • by HOW ?™
  • re: [C#] Code 小技巧 同事提到,字串是否是空值,用String.Length > 0 效能會比較差,並不會比Stri....
  • by HOW ?™
  • re: [C#]字串 to HOW ?™ : 再補充String串接還有一個方法, ....
  • by HOW ?™
  • re: [C#]字串 補充: + 運算子會預先計算字串長度,判萬有都少記憶體需要配置(深入淺出c# p.741),....
  • by HOW ?™
  • re: [C#]ArrayList初始容量 謝謝Allen老師的提醒,和感謝小賤健講解, 使用ArrayList會將所有要加入的物件都轉....
  • by HOW ?™
  • re: [c#]Local Objects to sholfen : 謝謝您的提醒,看到您的提醒頓時間恍然大悟,自己犯了最基本的錯誤,而在....
  • by HOW ?™
  • re: [c#]Local Objects to 91 : 謝謝您的詳細的講解,Console.Writeline(string)裡面,已....
  • by HOW ?™
  • re: [c#]Local Objects to Bill Chung : 謝謝您提供的資訊與指導,變數在函式裡面為Local Objec....
  • by HOW ?™

[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 授權條款
 

關連文章

[C#]字串

[C#]字串切割

回應

  • # re: 格式字串 by Allen Kuo

    貨幣與文化特性有關,生成的是美金,台幣差很多,要小心使用

    2012/4/19 下午 11:53 | 回覆

  • # re: 格式化字串 by HOW ?™

    to Allen Kuo :
    這麼一說,去查了才知道原來文化特性是可以設定的。

    2012/4/25 下午 11:27 | 回覆

登入後使用進階評論

Please add 2 and 3 and type the answer here: