練習 - 執行數學運算
您已了解加法,以及更重要的數值與字串資料類型間隱含類型轉換的基本概念,現在讓我們查看針對數值資料其他幾個常見的數學運算。
執行基本數學運算
撰寫程式碼來搭配整數執行加法、減法、乘法與除法
在 .NET 編輯器中選取所有程式碼,並按刪除鍵或退格鍵以刪除該程式碼。
在 .NET 編輯器中輸入下列程式碼:
int sum = 7 + 5; int difference = 7 - 5; int product = 7 * 5; int quotient = 7 / 5; Console.WriteLine("Sum: " + sum); Console.WriteLine("Difference: " + difference); Console.WriteLine("Product: " + product); Console.WriteLine("Quotient: " + quotient);
執行程式碼。 您應該會看見下列輸出:
Sum: 12 Difference: 2 Product: 35 Quotient: 1
如您所見:
+
是加法運算子-
是減法運算子*
是乘法運算子/
是除法運算子
不過,除法範例所產生的商可能不是您所預期的結果。 小數點後的值會從 quotient
中截斷,因為它已被定義為 int
,且 int
無法包含小數點後的值。
新增程式碼來使用常值十進位資料以執行除法
為了讓除法正確運作,您需要使用支援小數點後方小數位數的資料類型,例如 decimal
。
刪除先前步驟的程式碼,然後在 .NET 編輯器中輸入下列程式碼:
decimal decimalQuotient = 7.0m / 5; Console.WriteLine($"Decimal quotient: {decimalQuotient}");
執行程式碼。 您應該會看見下列輸出:
Decimal quotient: 1.4
如此一來,商 (指派運算子左側) 必須屬於類型 decimal
,並且至少有一個被除數也必須屬於類型 decimal
(兩者可同時為 decimal
類型)。
以下是兩個同樣適用的額外範例:
decimal decimalQuotient = 7 / 5.0m;
decimal decimalQuotient = 7.0m / 5.0m;
不過,下列幾行程式碼將無法運作 (或提供不正確的結果):
int decimalQuotient = 7 / 5.0m;
int decimalQuotient = 7.0m / 5;
int decimalQuotient = 7.0m / 5.0m;
decimal decimalQuotient = 7 / 5;
新增程式碼以轉換整數除法的結果
如果您不是使用常值該怎麼辦? 換句話說,如果您需要將兩個 int
類型的變數相除,但不想要截斷結果,該怎麼辦? 在該情況下,您必須執行從 int
到 decimal
的資料類型轉換。 轉換 (Cast) 是一種資料轉換 (Conversion),它會指示編譯器暫時將某個值視為不同的資料類型。
若要將 int
轉換為 decimal
,您會在值的前方新增轉換運算子。 您要在該值的前方以括弧將資料類型的名稱括住來轉換它。 在此情況下,您會在變數 first
與 second
之前加上 (decimal)
。
刪除先前步驟的程式碼,然後在 .NET 編輯器中輸入下列程式碼:
int first = 7; int second = 5; decimal quotient = (decimal)first / (decimal)second; Console.WriteLine(quotient);
執行程式碼。 您應該會看見下列輸出:
1.4
注意
您已看到括弧運算子的三種用途:方法叫用、運算順序與轉換。
撰寫程式碼來判斷整數除法之後的餘數
模收運算子 %
會告訴您 int
除法的餘數。 您實際從此結果得知的是其中一個數字是否可由另一個數字整除。 這在需要於數以百計或千計的資料記錄中執行迴圈,且您想要在每處理完 100 個資料記錄後便向使用者提供反饋的冗長處理作業中,可能會非常有用。
刪除先前步驟的程式碼,然後在 .NET 編輯器中輸入下列程式碼:
Console.WriteLine($"Modulus of 200 / 5 : {200 % 5}"); Console.WriteLine($"Modulus of 7 / 5 : {7 % 5}");
執行程式碼。 您應該會看見下列輸出:
Modulus of 200 / 5 : 0 Modulus of 7 / 5 : 2
當模數為 0 時,代表被除數可由除數整除。
運算順序
如您在先前練習中所學到的,您可以使用 ()
符號作為「運算順序」運算子。 不過,這不是判斷運算順序的唯一方式。
在數學中,PEMDAS 是可以協助學生記住運算順序的縮寫。 順序如下︰
- Parentheses (括弧) (必須先執行括弧內的內容)
- Exponents (指數)
- Multiplication (乘法) 與 Division (除法) (由左至右)
- Addition (加法) 與 Subtraction (減法) (由左至右)
C# 會遵循與 PEMDAS 相同的順序,除了指數之外。 雖然 C# 中沒有指數運算子,但您可以使用 System.Math.Pow 方法。 「使用 C# 從 .NET Class Library 呼叫方法」課程模組將會說明此方法與其他方法。
撰寫程式碼來執行 C# 的運算順序
刪除先前步驟的程式碼,然後在 .NET 編輯器中輸入下列程式碼:
int value1 = 3 + 4 * 5; int value2 = (3 + 4) * 5; Console.WriteLine(value1); Console.WriteLine(value2);
在這裡,您了解以不同順序執行相同運算時的差異。
執行程式碼。 您應該會看見下列輸出:
23 35
概括回顧
以下是到目前為止您學習到關於 C# 中的數學運算知識:
- 使用
+
、-
、*
與/
等運算子來執行基本數學運算。 - 將兩個
int
值相除將會導致系統截斷小數點之後的任何值。 若要保留小數點之後的值,您需要先將除數或被除數 (或兩者) 從int
轉換為浮點數 (例如decimal
),而且商也必須是相同的浮點類型,才能避免截斷。 - 執行轉換作業來暫時將值視為不同的資料類型。
- 使用
%
運算子來擷取相除後的餘數。 - 運算順序將會遵循 PEMDAS 縮寫的規則。