本教學課程會教導您 C# 中的數值類型。 您撰寫少量的程式代碼,然後編譯並執行該程序代碼。 本教學課程包含一系列課程,可探索 C# 中的數位和數學運算。 這些課程會教您 C# 語言的基本概念。
小提示
當代碼段區塊包含 [執行] 按鈕時,該按鈕會開啟互動式視窗,或取代互動式視窗中的現有程序代碼。 當程式碼片段不包含 [執行] 按鈕時,您可以複製程式代碼並將其加入目前的互動式視窗。
探索整數數學
在互動式視窗中執行下列程序代碼。
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);
上述程式代碼示範具有整數的基本數學運算。 型別 int
代表 整數,即正整數或負整數。 您使用+
符號來表示加法。 整數的其他常見數學運算包括:
-
-
用於減法 -
*
用於乘法 -
/
用於除法
從探索這些不同的作業開始。 修改第三行以嘗試每個作業。 例如,若要嘗試減法,請將 取代 +
為 -
,如下列這一行所示:
int c = a - b;
試試看。 選取 [執行] 按鈕。 然後,嘗試乘法,*
以及除法。 /
如果您想要的話,您也可以在同一行中撰寫多個數學運算來進行實驗。
小提示
當您探索 C# 或任何程式設計語言時,您在撰寫程式代碼時犯了錯誤。 編譯程式 會尋找這些錯誤,並將其回報給您。 當輸出包含錯誤訊息時,請仔細查看範例程式代碼,以及互動式視窗中的程式碼,以查看要修正的專案。 該練習可協助您瞭解 C# 程式代碼的結構。
探索作業順序
C# 語言會定義不同數學運算的優先順序,其規則與您數學學習的規則一致。 乘法和除法優先於加減。 在互動式視窗中執行下列程式代碼來探索:
int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);
從輸出可以看出,乘法在加法之前執行。
您可以藉由在您想要先執行的作業或作業周圍新增括號,以強制執行不同的作業順序。 將下列幾行新增至互動式視窗:
d = (a + b) * c;
Console.WriteLine(d);
嘗試結合許多不同的操作,以進一步探索。 將上述程式代碼中的第四行取代為如下:
d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Console.WriteLine(d);
您可能會注意到整數的有趣行為。 整數除法一律會產生整數結果,即使您預期結果包含小數或小數部分也一樣。
請嘗試下列程式代碼:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
Console.WriteLine(d);
探索整數的精度和限制
最後一個範例顯示整數除法會截斷結果。 您可以使用餘數運算元、字元來取得%
數:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
int e = (a + b) % c;
Console.WriteLine($"quotient: {d}");
Console.WriteLine($"remainder: {e}");
C# 整數類型與其他數學整數不同: int
此類型具有最小和最大限制。 請試著下列程式代碼以檢視這些限制:
int max = int.MaxValue;
int min = int.MinValue;
Console.WriteLine($"The range of integers is {min} to {max}");
如果計算產生超過這些限制的值,您就會有 下溢 或 溢位 條件。 答案似乎從一個界限延展到另一個界限。 若要查看範例,請在互動式視窗中新增這兩行:
int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");
請注意,答案非常接近最小值 (負數) 整數。 這與 min + 2
相同。 加法運算導致整數的允許值溢位。 答案是一個很大的負數,因為溢位會「循環回繞」,從最大的可能整數值變為最小的。
當 `int
` 類型不符合您的需求時,您可以使用具有不同限制和精度的其他數值類型。 接下來讓我們來探索這些類型的數位。
處理雙精度浮點數類型
數值 double
類型代表雙精確度浮點數。 這些詞彙對您來說可能是新的。
浮點數很適合用來表示大小可能很大或較小的非整數數位。
雙精確度 是一個相對詞彙,描述用來儲存值的二進位數位數。
雙精確度 數位的二進位數是 單精度的兩倍。 在現代計算機上,使用雙精確度比單精度數位更常見。
單精度 數字是使用 float
關鍵詞來宣告。 讓我們來探索。 執行下列程式代碼並檢視結果:
double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);
請注意,答案包含商數的小數部分。 嘗試使用雙精度稍微更複雜的運算式。 您可以使用下列值,或替代其他數位:
double a = 19;
double b = 23;
double c = 8;
double d = (a + b) / c;
Console.WriteLine(d);
雙精度浮點數值的範圍大於整數值。 在互動式視窗中嘗試下列程式代碼:
double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");
這些值會以科學表示法列印。 位於 E
前的數字是尾數。 後面的 E
數字是指數,以10為乘冪。
就像數學中的十進位數一樣,C# 中的雙精度型別可能會發生四捨五入誤差。 請嘗試下列程式代碼:
double third = 1.0 / 3.0;
Console.WriteLine(third);
您知道 0.3
是 3/10
,並不完全等同於 1/3
。 同樣地, 0.33
是 33/100
。 該值更接近 1/3
,但仍不精確。 無論您新增多少小數位數,捨入錯誤依然存在。
挑戰
嘗試使用 double
類型來進行大數、小數、乘法和除法的計算。 嘗試更複雜的計算。
使用十進位類型
有另一種類型可以學習:類型 decimal
。 這個 decimal
類型的範圍較小,但精確度大於 double
。 讓我們看看:
decimal min = decimal.MinValue;
decimal max = decimal.MaxValue;
Console.WriteLine($"The range of the decimal type is {min} to {max}");
請注意,範圍小於 double
類型。 您可以嘗試下列程式代碼,查看十進位類型的精確度更高。
double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);
decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);
請注意,使用十進位類型的數學運算在小數點右邊有更多位數。
數字的後綴M
是您用來表示常數應該使用decimal
型別的方式。 否則,編譯程式會假設為 double
類型。
備註
已選擇字母M
,因其在關鍵詞double
和decimal
中最具視覺差異。
挑戰
撰寫程式代碼,計算半徑為 2.50 公分的圓形區域。 請記住,圓形的區域是半徑平方乘以PI。 其中一個提示:.NET 包含 PI 的常數, Math.PI 可用於該值。
Math.PI,就像命名空間中 System.Math
宣告的所有常數一樣,是一個 double
值。 基於這個理由,您應該針對這項挑戰使用 double
而不是 decimal
值。
您應該會在 19 到 20 之間得到答案。
嘗試之後,請開啟詳細資料窗格,以查看您執行的方式:
如果您想要的話,請嘗試其他公式。
您已完成「C#中的數位」互動式教學課程。 您可以選取 Tuple 和類型 連結以啟動下一個互動式教學課程,或者您可以瀏覽 .NET 網站來下載 .NET SDK、在您的電腦上建立專案,以及繼續撰寫程式代碼。 「後續步驟」一節會帶您回到這些教學課程。
您可以在下列文章中深入瞭解 C# 中的數位: