演習 - 数学演算を実行する
加算、そしてさらに重要な、数値と文字列データ型の間の暗黙的な型変換の基本を理解したので、数値データに対するその他の一般的算術演算をいくつか見てみましょう。
基本的な算術演算を実行する
整数で加算、減算、乗算、除算を実行するコードを記述する
.NET エディターですべてのコードを選択し、Delete または Backspace キーを押して削除します。
.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
型である必要があり、かつ、割られる値の少なくとも 1 つも decimal
型である必要があります (両方の値が decimal
型でもかまいません)。
同様に機能する例をさらに 2 つ挙げます。
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
の 2 つの変数を除算する必要があるが、計算結果を切り捨てたくない場合、どうすればよいでしょうか。 その場合、int
を decimal
に型変換する必要があります。 型変換はデータ変換の一種であり、別のデータ型であるかのように一時的に値を扱うよう、コンパイラに指示します。
int
を decimal
に型変換するには、値の前に型変換演算子を追加します。 データ型をかっこで囲み、キャストする値の前に指定します。 この例では、変数 first
と second
の前に (decimal)
を追加します。
前の手順からのコードを削除し、次のコードを .NET エディターに入力します。
int first = 7; int second = 5; decimal quotient = (decimal)first / (decimal)second; Console.WriteLine(quotient);
コードを実行します。 次の出力が表示されます。
1.4
Note
かっこ演算子の 3 つの用途である、メソッド呼び出し、演算の順序、型変換を確認しました。
整数の除算後の剰余を決定するコードを記述する
剰余演算子 %
は、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 クラス ライブラリからメソッドを呼び出す」というモジュールでそれを含むメソッドが取り上げられています。
C# の操作の順序を実行するコードを記述する
前の手順からのコードを削除し、次のコードを .NET エディターに入力します。
int value1 = 3 + 4 * 5; int value2 = (3 + 4) * 5; Console.WriteLine(value1); Console.WriteLine(value2);
これから、同じ演算を異なる順序で実行したときの違いがわかります。
コードを実行します。 次の出力が表示されます。
23 35
まとめ
C# の数学演算についてこれまでに学習した内容を次に示します。
+
、-
、*
、/
などの演算子を使用し、基本的な算術演算を実行します。- 2 つの
int
値を除算すると、小数点の後ろの値がすべて切り捨てられます。 小数点の後ろの値を維持するには、除数または被除数 (あるいは両方) をint
からdecimal
のような浮動小数点数に型変換する必要があります。次に、切り捨てを回避するために、商を同じ浮動小数点型にする必要があります。 - 型変換演算を実行し、まるで別のデータ型であるかのように一時的に値を処理します。
- 除算後に剰余を取得するには、
%
演算子を使用します。 - 演算の順序は頭字語 PEMDAS の規則に従います。