練習 - 執行數學運算

已完成

您已了解加法,以及更重要的數值與字串資料類型間隱含類型轉換的基本概念,現在讓我們查看針對數值資料其他幾個常見的數學運算。

執行基本數學運算

撰寫程式碼來搭配整數執行加法、減法、乘法與除法

  1. 在 .NET 編輯器中選取所有程式碼,並按刪除鍵退格鍵以刪除該程式碼。

  2. 在 .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);
    
  3. 執行程式碼。 您應該會看見下列輸出:

    Sum: 12
    Difference: 2
    Product: 35
    Quotient: 1
    

如您所見:

  • + 是加法運算子
  • - 是減法運算子
  • * 是乘法運算子
  • / 是除法運算子

不過,除法範例所產生的商可能不是您所預期的結果。 小數點後的值會從 quotient 中截斷,因為它已被定義為 int,且 int 無法包含小數點後的值。

新增程式碼來使用常值十進位資料以執行除法

為了讓除法正確運作,您需要使用支援小數點後方小數位數的資料類型,例如 decimal

  1. 刪除先前步驟的程式碼,然後在 .NET 編輯器中輸入下列程式碼:

    decimal decimalQuotient = 7.0m / 5;
    Console.WriteLine($"Decimal quotient: {decimalQuotient}");
    
    
  2. 執行程式碼。 您應該會看見下列輸出:

    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 類型的變數相除,但不想要截斷結果,該怎麼辦? 在該情況下,您必須執行從 intdecimal 的資料類型轉換。 轉換 (Cast) 是一種資料轉換 (Conversion),它會指示編譯器暫時將某個值視為不同的資料類型。

若要將 int 轉換為 decimal,您會在值的前方新增轉換運算子。 您要在該值的前方以括弧將資料類型的名稱括住來轉換它。 在此情況下,您會在變數 firstsecond 之前加上 (decimal)

  1. 刪除先前步驟的程式碼,然後在 .NET 編輯器中輸入下列程式碼:

    int first = 7;
    int second = 5;
    decimal quotient = (decimal)first / (decimal)second;
    Console.WriteLine(quotient);
    
  2. 執行程式碼。 您應該會看見下列輸出:

    1.4
    

注意

您已看到括弧運算子的三種用途:方法叫用、運算順序與轉換。

撰寫程式碼來判斷整數除法之後的餘數

模收運算子 % 會告訴您 int 除法的餘數。 您實際從此結果得知的是其中一個數字是否可由另一個數字整除。 這在需要於數以百計或千計的資料記錄中執行迴圈,且您想要在每處理完 100 個資料記錄後便向使用者提供反饋的冗長處理作業中,可能會非常有用。

  1. 刪除先前步驟的程式碼,然後在 .NET 編輯器中輸入下列程式碼:

    Console.WriteLine($"Modulus of 200 / 5 : {200 % 5}");
    Console.WriteLine($"Modulus of 7 / 5 : {7 % 5}");
    
    
  2. 執行程式碼。 您應該會看見下列輸出:

    Modulus of 200 / 5 : 0
    Modulus of 7 / 5 : 2
    

當模數為 0 時,代表被除數可由除數整除。

運算順序

如您在先前練習中所學到的,您可以使用 () 符號作為「運算順序」運算子。 不過,這不是判斷運算順序的唯一方式。

在數學中,PEMDAS 是可以協助學生記住運算順序的縮寫。 順序如下︰

  1. Parentheses (括弧) (必須先執行括弧內的內容)
  2. Exponents (指數)
  3. Multiplication (乘法) 與 Division (除法) (由左至右)
  4. Addition (加法) 與 Subtraction (減法) (由左至右)

C# 會遵循與 PEMDAS 相同的順序,除了指數之外。 雖然 C# 中沒有指數運算子,但您可以使用 System.Math.Pow 方法。 「使用 C# 從 .NET Class Library 呼叫方法」課程模組將會說明此方法與其他方法。

撰寫程式碼來執行 C# 的運算順序

  1. 刪除先前步驟的程式碼,然後在 .NET 編輯器中輸入下列程式碼:

    int value1 = 3 + 4 * 5;
    int value2 = (3 + 4) * 5;
    Console.WriteLine(value1);
    Console.WriteLine(value2);
    

    在這裡,您了解以不同順序執行相同運算時的差異。

  2. 執行程式碼。 您應該會看見下列輸出:

    23
    35
    

概括回顧

以下是到目前為止您學習到關於 C# 中的數學運算知識:

  • 使用 +-*/ 等運算子來執行基本數學運算。
  • 將兩個 int 值相除將會導致系統截斷小數點之後的任何值。 若要保留小數點之後的值,您需要先將除數或被除數 (或兩者) 從 int 轉換為浮點數 (例如 decimal),而且商也必須是相同的浮點類型,才能避免截斷。
  • 執行轉換作業來暫時將值視為不同的資料類型。
  • 使用 % 運算子來擷取相除後的餘數。
  • 運算順序將會遵循 PEMDAS 縮寫的規則。