操作整數和浮點數數字
此教學課程會使用您的瀏覽器,以互動方式教導您有關 C# 中的數字類型。 您將會撰寫 C#,並查看程式碼編譯和執行的結果。 內容包含一系列探索 C# 中數字和數學運算的課程。 這些課程會教導您 C# 語言的基本概念。
提示
若要在焦點模式中貼上程式碼片段,您應該使用鍵盤快速鍵 (Ctrl + v 或 cmd + v)。
探索整數運算
在互動式視窗中執行下列程式碼。 選取 [進入焦點模式] 按鈕。 接著,在互動視窗中鍵入下列程式碼區塊,並選取 [執行]:
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);
如果您在自己的環境中工作,建議您改為遵循本機版本的指示。
您看到的是一種基本的整數數學運算。 int
型別代表整數,也就是正整數或負整數。 您使用 +
符號來執行加法。 整數常用的其他數學運算包括:
-
用於減法*
用於乘法/
用於除法
提示
在整個互動式教學課程中,您可以修改在互動式視窗中撰寫的程式碼,以自行探索各種變化。 本教學課程在每個步驟都有供您嘗試的範例。
讓我們開始探索這些不同的運算。 修改第三行來嘗試每種運算。 在每次編輯之後,選取 [執行] 按鈕。
Subtraction (減法):
int c = a - b;
Multiplication (乘法):
int c = a * b;
Division (除法):
int c = a / b;
如果您想要的話,也可以試著在同一行中寫入多個數學運算。
提示
在您探索 C# (或任何程式設計語言) 時,可能會在撰寫程式碼時犯錯。 編譯器會找出那些錯誤並回報給您。 當輸出包含錯誤訊息時,請仔細查看範例程式碼以及互動式視窗中的程式碼,看看有哪些可以修正。 該練習將有助於您了解 C# 程式碼的結構。
探索運算的順序
針對不同數學運算的優先順序,C# 語言所定義的規則與您在數學所學的規則一致。 乘法和除法的優先順序高於加法和減法。 請在互動式視窗中執行下列程式碼來探索上述優先順序:
int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);
輸出示範了程式會先執行乘法,然後再執行加法。
您可以在想要優先執行的一個或多個運算前後加上括號,以強制執行不同的運算順序:
int a = 5;
int b = 4;
int c = 2;
int d = (a + b) * c;
Console.WriteLine(d);
結合許多不同的運算來深入探索。 將上面的第四行取代為如下的內容:
int d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
您可能已注意到整數某個有趣的行為。 整數的除法一律會產生整數結果,即使您認為結果應有小數或分數部分也一樣。
如果您還沒看過這種行為,請嘗試下列程式碼:
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 型別
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
左邊的數字是有效數字。 右邊的數字則為指數,亦即 10 的次方。
就像數學上的小數數字,C# 中的雙精確度浮點數會發生捨入誤差。 請嘗試此程式碼:
double third = 1.0 / 3.0;
Console.WriteLine(third);
如您所知,0.3
是 3/10
,與 1/3
並不完全相同。 同樣地,0.33
是 33/100
。 這更接近 1/3
,但仍不完全相同。
挑戰
請嘗試使用 double
類型進行大型數字、小型數字、乘法和除法的其他計算。 嘗試更複雜的計算。
使用十進位類型
您已經看過 C# 中的基本數字型別:整數和雙精確度浮點數。 還有一個需要了解的類型是 decimal
類型。 decimal
類型的範圍較小,但精確度較 double
來得高。 讓我們來看一下:
decimal min = decimal.MinValue;
decimal max = decimal.MaxValue;
Console.WriteLine($"The range of the decimal type is {min} to {max}");
請注意該範圍小於 double
型別。 透過嘗試下列程式碼,您可以看到 decimal (小數) 型別有較高的精確度:
double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);
decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);
請注意,使用 decimal (小數) 型別的運算在小數點右邊會有更多的數字。
數字上的 M
尾碼乃是指示常數應使用 decimal
型別。 否則,編譯器會假設 double
類型。
注意
由於 double
與 decimal
關鍵字在視覺上最相異的字母是 M
,故此選擇之。
挑戰
您已經了解不同的數字型別,接著請撰寫程式碼,以計算半徑 2.50 公分的圓形面積。 提醒您圓形面積是 PI 乘以半徑的平方。 提示:.NET 包含 PI 的常數:Math.PI,可用來作為該值。 Math.PI 就像 System.Math
命名空間中宣告的所有常數一樣,是一個 double
值。 基於這個理由,您應該針對這項挑戰使用 double
,而不是 decimal
值。
您應該會取得介於 19 和 20 的答案。
完成挑戰
您是否有得到與下列程式碼類似的內容?
double radius = 2.50;
double area = Math.PI * radius * radius;
Console.WriteLine(area);
如果您想要的話,可以嘗試其他公式。
恭喜!
您已經完成<C# 中的數字>互動式教學課程。 您可以選取以下的分支和迴圈連結來啟動下一個互動式教學課程,或者您可以瀏覽 .NET 網站 (英文) 以下載 .NET SDK、在您的電腦上建立專案,並繼續撰寫程式碼。 <後續步驟>一節會帶您返回這些教學課程。
您可以在下列文章中深入瞭解 C# 中的數字:
在這個區段有遇到問題嗎? 如果有,請提供意見反應,好讓我們可以改善這個區段。