浮點數結構與非整數結構

Double 以及 Single 分別對應至具小數點的浮點數型別 double 與 float ,它們與整數結構類似,提供了型別轉換的相關方法成員,以及回傳有效範圍內的最大與最小常數欄位,前一個小節我們已針對其意義與實際用法進行了說明,這一部份就不再討論。
浮點數型態的資料,具有無窮的特性,而Double以及Single針對此種特殊的數值,提供了相關的方法成員,分別是 IsInfinity 以及 isNaN ,前者用來判斷指定的值是否為無限大,後者則判斷這個值是否為數值,以 Double 為例,這兩個方法的定義列舉如下,其回傳值均為 bool 型態:
public static bool IsInfinity (double d)
public static bool IsNaN (double d)
IsInfinity 判斷參數 d 是否為無窮數值,是的話回傳一個 true 的布林值,反之則是 false , IsNaN 則判斷參數 d 是否為一數值, true 代表此參數並非數值,反之為 false 。
除以 0 所回傳的是一個無窮數值,因此你可以撰寫以下的程式碼,其回傳一個 true 的結果。
Double.IsInfinity(1.0/0.0) ; 
另外一種運算,兩個 0.0 的double型別數值相除,則會得到一個無意義的結果,因此底下的程式碼同樣將回傳 true 。
Double.IsNaN(0.0/0.0) ; 
以下的範例示範相關的說明。
public class Program
{
    public static void Main(String[] args)
    {
        Console.WriteLine("1.0/0.0 是否為無限大:" + 
            Double.IsInfinity(1.0 / 0.0));
        Console.WriteLine("1.0/0.0 是否為數值:" + 
            !Double.IsNaN(1.0 / 0.0)); 
        Console.WriteLine("0.0/0.0 是否為無限大:" + 
            Double.IsInfinity(0.0 / 0.0)); 
        Console.WriteLine("0.0/0.0 是否為數值:" + 
            !Double.IsNaN(0.0 / 0.0));         
        Console.ReadLine();
    }
}
其中將兩個除以 0 的特殊運算 - 1.0/0.0 與 0.0/0.0 運算結果當作參數,引用 IsInfinity 與 IsNaN 方法,並且輸出其結果如下,可以看到除以零的無限結果。
1.0/0.0 是否為無限大:True
1.0/0.0 是否為數值:True
0.0/0.0 是否為無限大:False
0.0/0.0 是否為數值:False
針對無窮數值,如果想進一步檢視其為負無限值或是正無限值,可引用 IsNegativeInfinity 以及 IsPositiveInfinity ,有了上述的經驗,從字面上來看這兩個方法應該很容易理解,請自行嘗試改寫上述的範例看看這兩個方法的效果。
浮點數結構的欄位成員,除了整數構討論的MinValue 以及 MaxValue ,另外支援正負無窮大以及非數字的值讀取,相關的欄位有三個,列舉如下:
public const double NaN
public const double NegativeInfinity
public const double PositiveInfinity
從欄位的名稱,我們可以很清楚的了解這些欄位的意義,它們都是靜態成員,因此只要直接透過結構引用即可取得相關的數值,這些值在輸出的時候,直接以文字表示如下:
Double.NaN => 不是一個數字
Double.NegativeInfinity => 正無窮大
Double.PositiveInfinity => 負無窮大

Decimal

Decimal 是比較複雜的結構型態,它提供為數不少的方法成員,甚至包含了數種建立 Decimal 實體所需的建構式,我們可以藉由引用不同的建構式初始化 Decimal 實體。

除了 MaxValue 與 MinValue ,另外還有三個用來表示特定數字 - 1、0 與 -1 的欄位成員,列舉如下表:

欄位說明
MaxValue表示Decimal的最大可能值。這個欄位是不變且唯讀的。
MinusOne表示數字負一(-1)。
MinValue表示Decimal的最小可能值。這個欄位是不變且唯讀的。
One表示數字一(1)。
Zero表示數字零(0)。

Decimal結構亦提供了不少方法成員,其中包含了針對兩個Decimal數值進行四則運算的方法,以Add為例,其定義如下:
public static decimal Add (
 decimal d1,
 decimal d2
)
這個方法回傳 d1 與 d2 的總合,另外類似的方法還有 Multiply 、 Divide 與 Subtract ,它們執行的運算就如同其名稱,分別為乘法、除法以及減法等等。
Decimal 另外定義了一組用以轉換型別的方法成員,例如 ToInt32 將指定的 Decimal 值轉換為對等的 32 位元帶正負號整數,其他還有 ToByte 、 ToString 等等。

Boolean 結構

Boolean 是基礎型別 bool 的對應結構,它定義了兩個常數欄位, FalseString 以及TrueString ,用來取得 bool 型態數值的兩個可能值 - true 與 false ,列舉如下:
public static readonly string TrueString
public static readonly string FalseString
如你所見,這兩個欄位值回傳 true 與 false字串型態值,輸出如下:
Boolean.TrueString => True
Boolean.FalseString => False
Boolean 結構非常單純,它所提供的方法成員與討論整數結構的方法原理相同,這裏不再說明,請讀者自行測試即可。

Char

Char結構支援字元資料的操作,提供相關功能的方法成員,包含大小寫轉換、檢視字元是否為數字、或是符號,以下列舉其中幾項比較重要的方法成員:

欄位說明
ToUpper將指定的字元轉換成為大寫。
ToLower將指定的字元轉換成為小寫。
IsDigit檢視字元是否為 10 進位數字。
IsSymbol檢視字元是否為符號。

以下的範例示範表列方法成員的引用。
class Program
{
    static void Main(string[] args)
    {
        Char[] chars = { '康', '廷', '數', '位' };
        string name = new string(chars);
        //
        char a = 'a';
        char b = 'B';
        char x = '6';
        char s = '+';
        char n = 'x';
        Console.WriteLine(name);
        Console.WriteLine("a 轉換為大寫:" + Char.ToUpper(a));
        Console.WriteLine("B 轉換為小寫:" + Char.ToLower(b));
        Console.WriteLine("x 是否為 10 進位數字:" + Char.IsDigit(x));
        Console.WriteLine("s 是否為符號字元:" + Char.IsSymbol(s));
        Console.WriteLine("n 是否為符號字元:" + Char.IsSymbol(n));
        //         
        Console.ReadLine();
    }
}
一開始宣告 Char 陣列預先儲存數個測試字元,透過建立 string 物件直接輸出。
接下來逐一針對特定字元引用上表列的方法,輸出方法執行結果,比對以下的輸出可以瞭解方法的效果。
康廷數位
a 轉換為大寫:A
B 轉換為小寫:b
x 是否為 10 進位數字:True
s 是否為符號字元:True
n 是否為符號字元:False





沒有留言: