共用方式為


如何在 C 中使用整數和浮點數#

本教學課程會教導您 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.33/10,並不完全等同於 1/3。 同樣地, 0.3333/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,因其在關鍵詞doubledecimal中最具視覺差異。

挑戰

撰寫程式代碼,計算半徑為 2.50 公分的圓形區域。 請記住,圓形的區域是半徑平方乘以PI。 其中一個提示:.NET 包含 PI 的常數, Math.PI 可用於該值。 Math.PI,就像命名空間中 System.Math 宣告的所有常數一樣,是一個 double 值。 基於這個理由,您應該針對這項挑戰使用 double 而不是 decimal 值。

您應該會在 19 到 20 之間得到答案。

嘗試之後,請開啟詳細資料窗格,以查看您執行的方式:

:::code language=“csharp” interactive=“try-dotnet-method” source=“./snippets/NumbersInCsharp/Program.cs” id=“Challenge”::

如果您想要的話,請嘗試其他公式。

您已完成「C#中的數位」互動式教學課程。 您可以選取 Tuple 和類型 連結以啟動下一個互動式教學課程,或者您可以瀏覽 .NET 網站來下載 .NET SDK、在您的電腦上建立專案,以及繼續撰寫程式代碼。 「後續步驟」一節會帶您回到這些教學課程。

您可以在下列文章中深入瞭解 C# 中的數位: