C# 格式化輸出

來源:互聯網
上載者:User

    今天剛學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是固定點,還是不明白,望請大神指教。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.