【公告】因應 .NET5 2020 改版,原預計 6/1 開放 ASP.NET MVC 全系列課程訂閱暫停

實值型別 - 具有小數點的非整數數值

與數字有關的實值型別,除了整數,另外一大類就是具有小數點的數值 - 包含 float 、 double 以及 decimal 型別,用以處理含有小數的數值資料。

在「Floating-point types table (C# Reference)」列舉了所有的整數型別,進入頁面可以看到以下的列表清單截圖。



float 與 double

浮點數型別包含了 float 以及 double 兩種數值型別,分別用以處理含有小數的數值資料,例如 2.5 ,下表列舉其特性:

浮點數在數學或是繪圖領域的運用相當普遍, float 是一種 32 位元的資料型別, double則以 64 位元的長度來儲存資料。

如果沒有任何設定,編譯器預設包含小數點的數值為double資料型別,例如 2.55 ,沒有特別指定的話,這個數值一律被設定為 double 型態,若是要將數值以 float 資料型別來處理,則必須強制藉由字母 f 或是 F ,將其指定為 float 資料型別,以下兩行程式碼具有相同的效果:
float theValue=3.5f ; 
float theValue=3.5F ;
如果要將一般的整數設定為 double 型別,則需透過字母 d 或是 D 作設定,例如以下的程式碼:
double theValue=3d ; 
double theValue=3D ;
當然由於預設的關係,其中的 d 或是 D 並非必要。

來看以下的程式碼。
class Program
{
    static void Main(string[] args)
    {
        double x =123.45 ;       
        float y = 123.45 ;
        Console.WriteLine("x:" + x);
        Console.WriteLine("y:" + y);       
        Console.ReadLine();
    }
}

宣告一個 double 型別變數 x 以及 float 型別的變數 y ,接著分別將其輸出。

這個範例程式並沒有辦法順利通過編譯器,在編譯程式檔案的過程中,會出現錯誤訊息,告訴你 double 型別無法轉換成為 folat ,出現以下的錯誤訊息:
error CS0664: 不可將類型 double 的常值,隱含轉換成類型 'float'; 請使用 'F' 後置詞來建立此類型的常值。
調整內容如下:
float y = 123.45f ;
數字 123.45 後面緊接著連接浮點數識別字元 f ,重新編譯此範例檔案,即可順利完成編譯,輸出以下的結果:
x:123.45
y:123.45
浮點數型別的宣告與設值,同上述的整數型別,這個範例直接示範其中數值設定的可能發生問題的部份,必須謹記在心的是,執行 float 型別變數的運算,具小數點的數值一律必須指定字元 f ,否則因為編譯器直接將其辨識為 double 型別,而在 double 型別資料指定給 float 型別時發生錯誤。

decimal 型別

decimal 是另外一個可以用來處理具小數點位數的數值型別,這個型別可以準確的處理至小數點後第 28 位的數值,也就是 ±1.0 × 10e−28 ~ ±7.9 × 10e28 之間,而其本身以 128 位元來表示所處理的數值。

decimal 是一種相當龐大的數值型別,當程式所處理的數值非常大,並且需要考慮到精準度的時候,應該使用此種型別替代上述的兩個浮點數型別,例如金融會計的計算程式。

如同 float ,具小數點的 decimal 型別數字必須以字元 m 或是 M 作識別,例如以下這兩行程式碼,具有相同的效果。
decimal d = 123.45m ; 
decimal d = 123.45M ;
如果沒有指定 m 或是 M,你會遇到編譯器所送出的型別轉換錯誤訊息。


沒有留言: