C# 格式化輸出


    今天剛學C#,寫下我的第一個程序:

class Program{
   public static void Main(String[] args){
      Console.WriteLine(10.0);
   }
}

    作為一名java程序員,C#的寫法是有點差異,常用的System.out.println()被替換成:Console.WriteLine(),而且C#的規范要求方法的首字母大寫,但在java中這是類的命名規則。
     這些都是小問題,很快就習慣了,但我一運行這個代碼,就發現我的輸出變成了:10!

     原來,在C#這里,10.0會當成10來處理,如果我們想要正確的輸出10.0,就要利用格式化輸出,像是下面這樣:

Console.WriteLine("{0:N1}", 10.0);

     我們還可以這樣寫(這樣麻煩了點):

Console.WriteLine(String.Format("{0:N1}", 10.0));

    甚至我們還可以這樣寫;

double d = 10;
Console.WriteLine(d.ToString("N2");

    前面兩種寫法的第一個參數"{0:N1}"表示后面的第一個參數,就是10.0,取小數后一位,如果想取兩位,可以將1改為2。后面一種說明,在C#中,double本身就是一種對象類型,因為它擁有方法。事實上,在C#中,所有的類型,值類型和引用類型繼承自System.Object這個基類(看到Object,我這個java人可是親切得很,但也被C#的這種特點嚇到了~~才怪,javascript已經讓我對這種情況沒有什么感覺了---函數都是對象!)。

     當然,它可以處理更多的參數,像是這樣:

Console.WriteLine("I love {0}, you love {1}", "you", "me");

     而且我們還能以科學計數法的格式輸出:

Console.WriteLine("{0:E2}", 100);

    輸出結果就是:1.00E+002.

    格式化輸出還有更加神奇的地方:它允許一個格式項有多種格式選擇:

Console.WriteLine("{0:#,###0.00;#,###0.000;#,###0.0000}",10);
Console.WriteLine("{0:#,###0.00;#,###0.000;#,###0.0000}", -10);
Console.WriteLine("{0:#,###0.00;#,###0.000;#,###0.0000}", 0));

   神奇的是,這種格式具有選擇性,第一種格式對應的是正數,第二種對應的是負數,第三種對應的是0,后面的參數會根據自身情況,選擇相應的格式。

   格式化的內容很多,涉及到日期,貨幣等等,這些都是在需要用到的時候才會接觸,所以,這里就不詳談。上面的問題其實很簡單,因為我的數字是小數,在C#中,真的有一個專門的類型:decimal,它的位數是128位,范圍為1.0 * 10^-28到7.9 * 10^28。我在使用的時候應該是這樣:

   Console.WriteLine(10.0M);

   M表示是decimal類型,否則,就會默認轉化為double。

   例子雖短,但反映出來的東西卻不少,像是:string和String,應該用哪一個?

    我試過,兩者都行,C#不是對大小寫敏感嗎?事實上就是,CLR(學C#的同學一定知道這東西)中是String類型,但在C#中,是string關鍵字。C#編譯器在編譯的時候,會進行這樣的行為:

    using string = System.String這樣的映射操作。

    既然這樣,我就用回我以前習慣的String好了,這也是CLR via C#所建議的,但是其他的映射,像是:

    using int = System.Int32;

   using short = System.Int16;

   ...

   為了可讀性,我還是使用int,short比較好,就算那樣會提高點效率,但可讀性也很重要,但如果是調用方法,還是使用Int32比較好說明這是在調用方法。這里倒想要補充一點:System.Single這貨一開始讓我摸不着頭腦,后來才想起來是float!因為float是單精度,所以使用Single表示(對應System.Double的雙精度)。稍微吐糟這點,float這個名字讓很多人都忘記它是單精度的事實,因為浮點數這樣的名稱只會認為是小數。

   格式化輸出還有一個問題我一直搞不明白:N和F應該用哪一個?

    使用N,會有千分符,像是10000,會變成這樣:10,000,但有些結果看上去似乎是一樣的,像是10.235,使用N2和F2,是一樣的,就連尾數同樣是四舍五入。看了資料,說N是數值,F是固定點,還是不明白,望請大神指教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM