C#の割り算で小数・余り・切り捨てを正しく扱う方法【初心者向け】
はじめに
C#で割り算をするとき、初心者が特につまずきやすいのが「小数が出ない」「余りの求め方が分からない」「切り捨てと四捨五入の違いが分からない」といったポイントです。
例えば、次のようなコードを書いたとします。
C#int result = 5 / 2;
Console.WriteLine(result);
数学では「5 ÷ 2 = 2.5」ですが、C#ではこの結果は 2 になります。
これはC#の割り算が、計算に使う値の「型」によって結果が変わるためです。C#では int、double、decimal などの型を正しく理解して使い分けることが大切です。
この記事では、C#の割り算について、基本的な書き方から、小数の出し方、余りの求め方、切り捨て・切り上げ・四捨五入、0除算の注意点まで初心者向けに分かりやすく解説します。
1. C#の割り算で初心者がつまずくポイント
C#の割り算は、一見すると簡単そうに見えます。
C#Console.WriteLine(10 / 2);
このような単純な割り算であれば、結果は 5 になり、特に問題はありません。
しかし、次のようなコードでは注意が必要です。
C#Console.WriteLine(5 / 2);
この結果は 2.5 ではなく、2 になります。
C#では、割り算に使う数値の型によって、結果が整数になるのか、小数になるのかが変わります。そのため、C#で割り算を正しく扱うには、まず「型」を意識することが重要です。
1-1. C#の割り算は「型」によって結果が変わる
C#では、数値にはいくつかの型があります。
代表的な型は次の通りです。
C#int number1 = 10; // 整数
double number2 = 10.5; // 小数
decimal number3 = 10.5m; // 正確な小数計算向け
割り算をするとき、int 同士で計算すると結果も整数になります。
C#int a = 5;
int b = 2;
Console.WriteLine(a / b);
実行結果は次の通りです。
C#2
一方で、どちらか一方を double にすると、小数の結果になります。
C#double a = 5;
int b = 2;
Console.WriteLine(a / b);
実行結果は次の通りです。
C#2.5
このように、C#の割り算では「どの型で計算しているか」が非常に重要です。
1-2. int同士の割り算で小数が消える理由
int は整数を表す型です。整数型である int 同士を割り算すると、C#では小数点以下を持たない整数として結果が扱われます。
例えば、次のコードを見てください。
C#int result = 7 / 3;
Console.WriteLine(result);
実行結果は次の通りです。
C#2
本来の計算結果は 2.333... ですが、int 同士の割り算では小数点以下が切り捨てられます。
注意したいのは、計算結果を double の変数に代入しても、計算自体が int 同士で行われている場合は小数にならない点です。
C#double result = 7 / 3;
Console.WriteLine(result);
この結果は次のようになります。
C#2
double に代入しているので 2.333... になりそうですが、実際には 7 / 3 の時点で整数の割り算が行われ、結果が 2 になっています。その後で double に代入されるため、結果は 2 になります。
小数を出したい場合は、割り算をする前に double や decimal に変換する必要があります。
1-3. 小数・余り・切り捨てを混同しやすいケース
C#の割り算では、次の3つを混同しやすいです。
C#5 / 2
5 % 2
Math.Round(5.0 / 2)
それぞれ意味が異なります。
C#Console.WriteLine(5 / 2); // 2
Console.WriteLine(5 % 2); // 1
Console.WriteLine(5.0 / 2); // 2.5
Console.WriteLine(Math.Round(5.0 / 2)); // 2
/ は割り算の商を求めます。
% は余りを求めます。
Math.Round は四捨五入を行います。
同じ「割り算」に関係する処理でも、目的によって使う演算子やメソッドが異なります。C#で割り算を正しく書くには、「小数を出したいのか」「余りを出したいのか」「切り捨てたいのか」を明確にすることが大切です。
2. C#の基本的な割り算の書き方
C#で割り算をする基本はとてもシンプルです。割り算には / 演算子を使います。
ただし、整数の割り算と小数の割り算では結果が変わるため、基本の書き方とあわせて型の違いも理解しておきましょう。
2-1. 割り算には「/」演算子を使う
C#で割り算を行うには、次のように / を使います。
C#Console.WriteLine(10 / 2);
実行結果は次の通りです。
C#5
変数を使う場合も同じです。
C#int a = 10;
int b = 2;
int result = a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#5
+ が足し算、- が引き算、* が掛け算、/ が割り算です。
C#Console.WriteLine(10 + 2); // 12
Console.WriteLine(10 - 2); // 8
Console.WriteLine(10 * 2); // 20
Console.WriteLine(10 / 2); // 5
2-2. int同士で割り算する場合
int 同士で割り算をすると、結果も整数になります。
C#int a = 9;
int b = 2;
int result = a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#4
9 ÷ 2 は本来 4.5 ですが、int 同士の割り算では小数点以下が切り捨てられます。
次のように書いても同じです。
C#Console.WriteLine(9 / 2);
実行結果は次の通りです。
C#4
整数だけが必要な場合は、int 同士の割り算で問題ありません。
例えば、10個の商品を3個ずつ箱に入れるとき、完全に作れる箱の数だけを知りたい場合は、整数の割り算が使えます。
C#int itemCount = 10;
int itemsPerBox = 3;
int boxCount = itemCount / itemsPerBox;
Console.WriteLine(boxCount);
実行結果は次の通りです。
C#3
ただし、余った個数を知りたい場合は % 演算子を使います。
2-3. doubleやdecimalで割り算する場合
小数を含む割り算をしたい場合は、double や decimal を使います。
C#double a = 9;
double b = 2;
double result = a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#4.5
decimal を使う場合は、小数リテラルの後ろに m を付けます。
C#decimal a = 9m;
decimal b = 2m;
decimal result = a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#4.5
double は一般的な小数計算に使いやすい型です。一方、decimal は金額計算など、より正確な小数計算が必要な場面でよく使われます。
2-4. 変数を使った割り算のサンプルコード
実際のプログラムでは、固定の数値よりも変数を使って割り算することが多いです。
C#int totalScore = 240;
int subjectCount = 3;
int average = totalScore / subjectCount;
Console.WriteLine(average);
実行結果は次の通りです。
C#80
小数を含む平均を出したい場合は、double に変換します。
C#int totalScore = 250;
int subjectCount = 3;
double average = (double)totalScore / subjectCount;
Console.WriteLine(average);
実行結果は次のようになります。
C#83.33333333333333
このように、割り算の結果に小数が必要な場合は、計算前に型変換を行うことが大切です。
3. C#の割り算で小数を正しく出す方法
C#で割り算の結果を小数で表示したい場合、int 同士の割り算をそのまま行ってはいけません。
初心者によくあるミスは、次のようなコードです。
C#int a = 5;
int b = 2;
double result = a / b;
Console.WriteLine(result);
この結果は 2.5 ではなく、2 になります。
小数を正しく出すには、割り算をする前に double や decimal に変換する必要があります。
3-1. int同士の割り算では小数点以下が切り捨てられる
int 同士の割り算では、小数点以下が切り捨てられます。
C#int a = 10;
int b = 4;
Console.WriteLine(a / b);
実行結果は次の通りです。
C#2
10 ÷ 4 は 2.5 ですが、結果は 2 です。
ここで大切なのは、「四捨五入」ではなく「切り捨て」になる点です。
C#Console.WriteLine(9 / 2); // 4
Console.WriteLine(10 / 3); // 3
Console.WriteLine(11 / 4); // 2
小数点以下が必要な場合は、int 同士のまま計算しないようにしましょう。
3-2. doubleにキャストして小数を出す方法
int の値を使いながら小数の結果を出したい場合は、明示的に double にキャストします。
C#int a = 10;
int b = 4;
double result = (double)a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#2.5
(double)a と書くことで、a を double として扱います。
片方が double になれば、もう片方も計算時に double として扱われるため、小数の結果になります。
次のように書いても同じです。
C#double result = a / (double)b;
また、数値リテラルに .0 を付ける方法もあります。
C#Console.WriteLine(10.0 / 4);
実行結果は次の通りです。
C#2.5
10 は整数ですが、10.0 は小数として扱われます。
3-3. decimalを使って正確な小数計算をする方法
金額計算など、誤差をできるだけ避けたい場合は decimal を使います。
C#decimal price = 100m;
decimal count = 3m;
decimal result = price / count;
Console.WriteLine(result);
実行結果は次のようになります。
C#33.333333333333333333333333333
decimal の数値には、末尾に m を付けます。
C#decimal taxRate = 0.1m;
decimal price = 1000m;
decimal tax = price * taxRate;
Console.WriteLine(tax);
実行結果は次の通りです。
C#100.0
金額、税率、請求額、割引率などを扱う場合は、double よりも decimal を選ぶことが多いです。
3-4. doubleとdecimalの使い分け
double と decimal はどちらも小数を扱えますが、用途が異なります。
double は、科学技術計算、座標計算、統計処理、ゲームの位置計算などでよく使われます。
C#double distance = 12.5;
double time = 2.0;
double speed = distance / time;
Console.WriteLine(speed);
一方、decimal は、金額計算や会計処理のように、正確な10進数計算が求められる場面で使います。
C#decimal totalPrice = 1280m;
decimal people = 3m;
decimal perPerson = totalPrice / people;
Console.WriteLine(perPerson);
初心者のうちは、次のように覚えると分かりやすいです。
C#// 一般的な小数計算
double result1 = 10.0 / 3;
// 金額など正確さが重要な計算
decimal result2 = 10m / 3m;
単純な練習や一般的な計算では double、金額計算では decimal を使うとよいでしょう。
4. C#の割り算で余りを求める方法
C#で割り算の余りを求めるには、% 演算子を使います。
/ は商を求める演算子で、% は余りを求める演算子です。
C#Console.WriteLine(10 / 3); // 商
Console.WriteLine(10 % 3); // 余り
実行結果は次の通りです。
C#3
1
10 ÷ 3 は、商が 3、余りが 1 です。
4-1. 余りは「%」演算子で求める
余りを求める基本形は次の通りです。
C#int result = 10 % 3;
Console.WriteLine(result);
実行結果は次の通りです。
C#1
他の例も見てみましょう。
C#Console.WriteLine(8 % 2); // 0
Console.WriteLine(9 % 2); // 1
Console.WriteLine(15 % 4); // 3
Console.WriteLine(20 % 6); // 2
余りが 0 の場合は、割り切れるという意味です。
C#Console.WriteLine(8 % 2); // 0
これは、8 が 2 で割り切れることを表しています。
4-2. 商と余りを同時に求めるサンプル
商と余りを同時に求めたい場合は、/ と % を組み合わせます。
C#int number = 17;
int divisor = 5;
int quotient = number / divisor;
int remainder = number % divisor;
Console.WriteLine($"商: {quotient}");
Console.WriteLine($"余り: {remainder}");
実行結果は次の通りです。
C#商: 3
余り: 2
17 ÷ 5 は、商が 3、余りが 2 です。
この考え方は、ページ数の計算、グループ分け、偶数・奇数判定などでよく使われます。
4-3. 偶数・奇数判定に余りを使う方法
余りは、偶数・奇数の判定によく使われます。
2で割った余りが 0 なら偶数、1 なら奇数です。
C#int number = 7;
if (number % 2 == 0)
{
Console.WriteLine("偶数です");
}
else
{
Console.WriteLine("奇数です");
}
実行結果は次の通りです。
C#奇数です
偶数の場合は次のようになります。
C#int number = 8;
if (number % 2 == 0)
{
Console.WriteLine("偶数です");
}
else
{
Console.WriteLine("奇数です");
}
実行結果は次の通りです。
C#偶数です
% は条件分岐と組み合わせることで、実践的な処理に使いやすくなります。
4-4. 割り切れるかどうかを判定する方法
ある数が別の数で割り切れるかどうかは、余りが 0 かどうかで判定できます。
C#int number = 15;
int divisor = 3;
if (number % divisor == 0)
{
Console.WriteLine("割り切れます");
}
else
{
Console.WriteLine("割り切れません");
}
実行結果は次の通りです。
C#割り切れます
別の例です。
C#int number = 16;
int divisor = 3;
if (number % divisor == 0)
{
Console.WriteLine("割り切れます");
}
else
{
Console.WriteLine("割り切れません");
}
実行結果は次の通りです。
C#割り切れません
割り切れるかどうかの判定は、次のような場面でよく使います。
C#if (totalCount % pageSize == 0)
{
Console.WriteLine("ちょうどページに収まります");
}
else
{
Console.WriteLine("最後のページに余りがあります");
}
5. C#の割り算で切り捨て・切り上げ・四捨五入する方法
C#で割り算結果を整数にしたい場合、切り捨て、切り上げ、四捨五入のどれを使うかを考える必要があります。
それぞれ結果が異なるため、目的に応じて正しく使い分けましょう。
C#double value = 2.5;
Console.WriteLine(Math.Floor(value)); // 2
Console.WriteLine(Math.Ceiling(value)); // 3
Console.WriteLine(Math.Round(value)); // 2
Math.Floor は切り捨て、Math.Ceiling は切り上げ、Math.Round は四捨五入に使います。
5-1. int同士の割り算は自動的に切り捨てになる
int 同士の割り算では、小数点以下が自動的に切り捨てられます。
C#Console.WriteLine(5 / 2);
Console.WriteLine(7 / 3);
Console.WriteLine(10 / 4);
実行結果は次の通りです。
C#2
2
2
これらはすべて、計算結果の小数点以下が切り捨てられています。
C#5 / 2 // 2.5 → 2
7 / 3 // 2.333... → 2
10 / 4 // 2.5 → 2
整数の商だけが必要な場合は便利ですが、小数が必要な場合には注意が必要です。
5-2. Math.Floorで切り捨てる
小数の値を明示的に切り捨てたい場合は、Math.Floor を使います。
C#double value = 3.8;
double result = Math.Floor(value);
Console.WriteLine(result);
実行結果は次の通りです。
C#3
割り算の結果を切り捨てる場合は、次のように書きます。
C#double result = Math.Floor(10.0 / 3);
Console.WriteLine(result);
実行結果は次の通りです。
C#3
Math.Floor は「指定した値以下の最大の整数」を返します。
正の数では直感的な切り捨てと同じように使えます。
C#Console.WriteLine(Math.Floor(2.1)); // 2
Console.WriteLine(Math.Floor(2.9)); // 2
ただし、負の数では注意が必要です。
C#Console.WriteLine(Math.Floor(-2.1));
実行結果は次の通りです。
C#-3
-2.1 以下の最大の整数は -3 なので、この結果になります。
5-3. Math.Ceilingで切り上げる
小数の値を切り上げたい場合は、Math.Ceiling を使います。
C#double value = 3.1;
double result = Math.Ceiling(value);
Console.WriteLine(result);
実行結果は次の通りです。
C#4
割り算の結果を切り上げる場合は、次のように書きます。
C#double result = Math.Ceiling(10.0 / 3);
Console.WriteLine(result);
実行結果は次の通りです。
C#4
切り上げは、ページ数の計算などでよく使います。
例えば、23件のデータを1ページあたり10件ずつ表示する場合、必要なページ数は3ページです。
C#int totalItems = 23;
int pageSize = 10;
int pageCount = (int)Math.Ceiling((double)totalItems / pageSize);
Console.WriteLine(pageCount);
実行結果は次の通りです。
C#3
5-4. Math.Roundで四捨五入する
四捨五入をしたい場合は、Math.Round を使います。
C#double value = 3.6;
double result = Math.Round(value);
Console.WriteLine(result);
実行結果は次の通りです。
C#4
割り算結果を四捨五入する例です。
C#double result = Math.Round(10.0 / 3);
Console.WriteLine(result);
実行結果は次の通りです。
C#3
小数点以下の桁数を指定することもできます。
C#double result = Math.Round(10.0 / 3, 2);
Console.WriteLine(result);
実行結果は次の通りです。
C#3.33
第2引数に 2 を指定すると、小数第2位までに丸めます。
C#Console.WriteLine(Math.Round(1.2345, 2)); // 1.23
Console.WriteLine(Math.Round(1.2355, 2)); // 1.24
Math.Round は表示用の数値を整えるときにもよく使います。
5-5. キャストによる切り捨てとの違い
小数を int にキャストすると、小数点以下が切り捨てられます。
C#double value = 3.8;
int result = (int)value;
Console.WriteLine(result);
実行結果は次の通りです。
C#3
正の数では Math.Floor と似た結果になります。
C#Console.WriteLine((int)3.8); // 3
Console.WriteLine(Math.Floor(3.8)); // 3
しかし、負の数では結果が異なります。
C#Console.WriteLine((int)-3.8);
Console.WriteLine(Math.Floor(-3.8));
実行結果は次の通りです。
C#-3
-4
キャストによる int 変換は、0に近づく方向に小数点以下を切り捨てます。
一方、Math.Floor は指定した値以下の最大の整数を返します。
正の数だけを扱う場合は似ていますが、負の数を扱う可能性がある場合は違いに注意しましょう。
6. C#の割り算でよくあるエラーと注意点
C#の割り算で特に注意すべきなのが、0で割るケースです。
数学でも0で割ることはできませんが、C#でも基本的に0除算はエラーの原因になります。
C#int a = 10;
int b = 0;
Console.WriteLine(a / b);
このようなコードを書くと、実行時に例外が発生します。
6-1. 0で割るとエラーになる
整数を0で割ると、DivideByZeroException が発生します。
C#int a = 10;
int b = 0;
int result = a / b;
Console.WriteLine(result);
このコードを実行すると、エラーになります。
0で割る可能性がある場合は、割り算の前に必ずチェックしましょう。
C#int a = 10;
int b = 0;
if (b != 0)
{
int result = a / b;
Console.WriteLine(result);
}
else
{
Console.WriteLine("0で割ることはできません");
}
6-2. DivideByZeroExceptionが発生するケース
DivideByZeroException は、整数型の割り算で0除算をしたときに発生します。
C#int x = 100;
int y = 0;
int result = x / y;
また、余りを求める % でも、右辺が0の場合はエラーになります。
C#int x = 100;
int y = 0;
int remainder = x % y;
/ だけでなく % でも0除算に注意が必要です。
安全に書くなら、次のようにします。
C#int x = 100;
int y = 0;
if (y == 0)
{
Console.WriteLine("割る数が0です");
}
else
{
Console.WriteLine(x / y);
Console.WriteLine(x % y);
}
6-3. doubleで0除算した場合の挙動
double の場合、整数とは少し挙動が異なります。
C#double a = 10.0;
double b = 0.0;
double result = a / b;
Console.WriteLine(result);
実行結果は次のようになります。
C#Infinity
double では、正の数を0で割ると Infinity になることがあります。
負の数を0で割ると -Infinity になります。
C#Console.WriteLine(10.0 / 0.0); // Infinity
Console.WriteLine(-10.0 / 0.0); // -Infinity
また、0を0で割ると NaN になります。
C#Console.WriteLine(0.0 / 0.0); // NaN
NaN は「Not a Number」の略で、数値として表せない結果を意味します。
このように、double では0除算しても必ず例外になるとは限りませんが、意図しない結果になりやすいため、やはり0チェックは重要です。
6-4. 割る前に0チェックする安全な書き方
割り算を安全に行うには、割る数が0でないことを確認してから計算します。
C#int numerator = 100;
int denominator = 0;
if (denominator != 0)
{
int result = numerator / denominator;
Console.WriteLine(result);
}
else
{
Console.WriteLine("割る数が0のため計算できません");
}
メソッドにする場合は、次のように書くこともできます。
C#static double Divide(double numerator, double denominator)
{
if (denominator == 0)
{
throw new ArgumentException("割る数に0は指定できません");
}
return numerator / denominator;
}
使い方は次の通りです。
C#double result = Divide(10, 2);
Console.WriteLine(result);
実行結果は次の通りです。
C#5
例外を投げたくない場合は、bool で成功・失敗を返す方法もあります。
C#static bool TryDivide(double numerator, double denominator, out double result)
{
if (denominator == 0)
{
result = 0;
return false;
}
result = numerator / denominator;
return true;
}
使い方は次の通りです。
C#if (TryDivide(10, 0, out double result))
{
Console.WriteLine(result);
}
else
{
Console.WriteLine("計算できませんでした");
}
実行結果は次の通りです。
C#計算できませんでした
実務では、ユーザー入力や外部データを使って割り算することも多いため、0チェックを忘れないようにしましょう。
7. C#の割り算で型変換を使う方法
C#の割り算では、型変換を使うことで計算結果を変えることができます。
特に、int 同士の割り算で小数を出したい場合は、型変換が重要です。
C#int a = 5;
int b = 2;
double result = (double)a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#2.5
7-1. 明示的キャストで計算結果を変える
明示的キャストとは、プログラマーが明示的に型を変換することです。
C#int a = 7;
int b = 2;
double result = (double)a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#3.5
(double)a と書くことで、a を double として扱っています。
次のように、割る数側をキャストしても同じです。
C#double result = a / (double)b;
ただし、次の書き方では小数になりません。
C#double result = (double)(a / b);
この場合、先に a / b が int 同士で計算され、その後で double に変換されます。
C#int a = 7;
int b = 2;
double result = (double)(a / b);
Console.WriteLine(result);
実行結果は次の通りです。
C#3
小数を出したい場合は、割り算の前にどちらか一方を double にする必要があります。
7-2. 片方だけdoubleにすると小数になる
C#では、割り算する値の片方が double であれば、結果も double になります。
C#int a = 5;
double b = 2;
double result = a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#2.5
数値リテラルを使う場合も同じです。
C#Console.WriteLine(5 / 2); // 2
Console.WriteLine(5.0 / 2); // 2.5
Console.WriteLine(5 / 2.0); // 2.5
5 は int として扱われますが、5.0 は double として扱われます。
初心者のうちは、小数を出したい場合は次のように書くと分かりやすいです。
C#double result = (double)a / b;
7-3. Convert.ToDoubleを使う方法
Convert.ToDouble を使って、値を double に変換することもできます。
C#int a = 5;
int b = 2;
double result = Convert.ToDouble(a) / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#2.5
文字列から数値に変換して割り算する場合にも使えます。
C#string input1 = "10";
string input2 = "4";
double a = Convert.ToDouble(input1);
double b = Convert.ToDouble(input2);
double result = a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#2.5
ただし、文字列が数値に変換できない場合はエラーになります。
C#string input = "abc";
double number = Convert.ToDouble(input);
ユーザー入力を扱う場合は、double.TryParse を使うと安全です。
C#string input = "10.5";
if (double.TryParse(input, out double number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値に変換できません");
}
7-4. 型変換で起きやすいミス
C#の割り算でよくある型変換のミスは、計算後にキャストしてしまうことです。
C#int a = 5;
int b = 2;
double result = (double)(a / b);
Console.WriteLine(result);
この結果は 2.5 ではありません。
C#2
正しくは、計算前にキャストします。
C#double result = (double)a / b;
また、decimal と double を混ぜて計算しようとするとエラーになることがあります。
C#decimal price = 100m;
double rate = 0.1;
var result = price * rate;
decimal と double はそのまま混ぜて計算できません。
金額計算では、両方を decimal にそろえます。
C#decimal price = 100m;
decimal rate = 0.1m;
decimal result = price * rate;
Console.WriteLine(result);
型変換では、次の点を意識しましょう。
C#// 小数を出したいなら計算前に変換する
double result1 = (double)5 / 2;
// 金額計算ではdecimalにそろえる
decimal result2 = 100m / 3m;
// 計算後のキャストでは小数は復活しない
double result3 = (double)(5 / 2);
8. 実践でよく使うC#の割り算サンプル
ここからは、実際のプログラムでよく使うC#の割り算サンプルを紹介します。
割り算は、平均値、パーセント、ページ数、金額計算、リスト処理など、さまざまな場面で使われます。
基本の考え方は同じですが、目的によって int、double、decimal、Math.Ceiling などを使い分けることが大切です。
8-1. 平均値を求める
平均値は、合計を件数で割って求めます。
C#int total = 250;
int count = 3;
double average = (double)total / count;
Console.WriteLine(average);
実行結果は次の通りです。
C#83.33333333333333
ここで (double)total としているのは、小数の結果を出すためです。
もし次のように書くと、小数点以下が切り捨てられます。
C#double average = total / count;
この結果は 83 になります。
配列の平均を求める場合は、次のように書けます。
C#int[] scores = { 80, 90, 75 };
int total = 0;
foreach (int score in scores)
{
total += score;
}
double average = (double)total / scores.Length;
Console.WriteLine(average);
8-2. パーセントを計算する
パーセントを求めるには、割合を計算して100を掛けます。
C#int correct = 45;
int total = 60;
double rate = (double)correct / total * 100;
Console.WriteLine(rate + "%");
実行結果は次の通りです。
C#75%
小数点以下を整えたい場合は、Math.Round を使います。
C#int correct = 37;
int total = 60;
double rate = (double)correct / total * 100;
double roundedRate = Math.Round(rate, 1);
Console.WriteLine(roundedRate + "%");
実行結果は次の通りです。
C#61.7%
パーセント計算では、int 同士の割り算に注意しましょう。
C#int correct = 37;
int total = 60;
double rate = correct / total * 100;
Console.WriteLine(rate);
この場合、correct / total が 0 になってしまうため、結果も 0 になります。
正しくは次のように書きます。
C#double rate = (double)correct / total * 100;
8-3. ページ数を計算する
データの件数からページ数を求める場合は、切り上げが必要です。
例えば、23件のデータを1ページ10件で表示する場合、必要なページ数は3ページです。
C#int totalItems = 23;
int pageSize = 10;
int pageCount = (int)Math.Ceiling((double)totalItems / pageSize);
Console.WriteLine(pageCount);
実行結果は次の通りです。
C#3
23 / 10 を整数で計算すると 2 になってしまいます。
C#Console.WriteLine(23 / 10);
実行結果は次の通りです。
C#2
しかし、実際には残り3件を表示するためにもう1ページ必要です。
そのため、ページ数の計算では Math.Ceiling を使って切り上げます。
余りを使ってページ数を求める方法もあります。
C#int totalItems = 23;
int pageSize = 10;
int pageCount = totalItems / pageSize;
if (totalItems % pageSize != 0)
{
pageCount++;
}
Console.WriteLine(pageCount);
実行結果は次の通りです。
C#3
8-4. 消費税や金額計算で使う
金額計算では、decimal を使うのが基本です。
C#decimal price = 1000m;
decimal taxRate = 0.10m;
decimal tax = price * taxRate;
decimal total = price + tax;
Console.WriteLine(tax);
Console.WriteLine(total);
実行結果は次の通りです。
C#100.00
1100.00
割り勘の計算をする場合も、decimal が向いています。
C#decimal totalPrice = 5000m;
int people = 3;
decimal perPerson = totalPrice / people;
Console.WriteLine(perPerson);
実行結果は次のようになります。
C#1666.6666666666666666666666667
金額として小数点以下を丸めたい場合は、Math.Round を使います。
C#decimal totalPrice = 5000m;
int people = 3;
decimal perPerson = Math.Round(totalPrice / people, 0);
Console.WriteLine(perPerson);
実行結果は次の通りです。
C#1667
金額計算では、切り捨て、切り上げ、四捨五入のルールを事前に決めておくことが重要です。
8-5. 配列やリストの件数を割る
配列やリストの件数を使って割り算する場面もよくあります。
例えば、リストの要素数を使って平均を求める場合です。
C#List<int> scores = new List<int> { 80, 90, 70, 85 };
int total = 0;
foreach (int score in scores)
{
total += score;
}
double average = (double)total / scores.Count;
Console.WriteLine(average);
実行結果は次の通りです。
C#81.25
ただし、リストが空の場合は scores.Count が 0 になるため、0除算に注意が必要です。
C#List<int> scores = new List<int>();
if (scores.Count > 0)
{
int total = 0;
foreach (int score in scores)
{
total += score;
}
double average = (double)total / scores.Count;
Console.WriteLine(average);
}
else
{
Console.WriteLine("データがありません");
}
配列やリストの件数で割る場合は、件数が0でないか必ず確認しましょう。
9. C#の割り算に関するよくある質問
ここでは、C#の割り算で初心者が疑問に思いやすいポイントをQ&A形式で解説します。
特に「結果が0になる」「小数点以下が表示されない」「商と余りの違いが分からない」といった問題はよくあります。
9-1. C#で割り算の結果が0になるのはなぜ?
int 同士で割り算している可能性があります。
例えば、次のコードを見てください。
C#int a = 1;
int b = 2;
double result = a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#0
1 ÷ 2 は 0.5 ですが、int 同士の割り算では小数点以下が切り捨てられるため、結果は 0 になります。
正しく小数を出すには、次のようにします。
C#double result = (double)a / b;
実行結果は次の通りです。
C#0.5
9-2. C#で小数点以下を表示するには?
割り算をする前に、どちらか一方を double や decimal に変換します。
C#int a = 5;
int b = 2;
double result = (double)a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#2.5
数値リテラルを使う場合は、次のように .0 を付けても小数になります。
C#Console.WriteLine(5.0 / 2);
実行結果は次の通りです。
C#2.5
金額計算などでは decimal を使います。
C#decimal result = 5m / 2m;
Console.WriteLine(result);
実行結果は次の通りです。
C#2.5
9-3. C#で商だけを求めるには?
商だけを求めるには / 演算子を使います。
C#int result = 10 / 3;
Console.WriteLine(result);
実行結果は次の通りです。
C#3
10 ÷ 3 の商は 3 です。
小数ではなく整数の商だけが欲しい場合は、int 同士で割り算すれば小数点以下は切り捨てられます。
C#int quotient = 17 / 5;
Console.WriteLine(quotient);
実行結果は次の通りです。
C#3
9-4. C#で余りだけを求めるには?
余りだけを求めるには % 演算子を使います。
C#int remainder = 10 % 3;
Console.WriteLine(remainder);
実行結果は次の通りです。
C#1
10 ÷ 3 は、商が 3、余りが 1 です。
商と余りを両方求める場合は、次のようにします。
C#int number = 10;
int divisor = 3;
int quotient = number / divisor;
int remainder = number % divisor;
Console.WriteLine($"商: {quotient}");
Console.WriteLine($"余り: {remainder}");
実行結果は次の通りです。
C#商: 3
余り: 1
9-5. C#で割り算結果を切り捨てない方法は?
割り算結果を切り捨てたくない場合は、int 同士で割り算しないようにします。
C#int a = 7;
int b = 2;
double result = (double)a / b;
Console.WriteLine(result);
実行結果は次の通りです。
C#3.5
次のように、片方を double にしても同じです。
C#double result = 7.0 / 2;
また、金額計算では decimal を使います。
C#decimal result = 7m / 2m;
Console.WriteLine(result);
実行結果は次の通りです。
C#3.5
切り捨てたくない場合は、「計算前に小数型へ変換する」と覚えておきましょう。
まとめ
C#の割り算では、/ 演算子を使って商を求め、% 演算子を使って余りを求めます。
ただし、C#では型によって割り算の結果が変わります。
int 同士で割り算すると、小数点以下は切り捨てられます。
C#Console.WriteLine(5 / 2); // 2
小数を出したい場合は、どちらか一方を double や decimal に変換します。
C#Console.WriteLine((double)5 / 2); // 2.5
Console.WriteLine(5m / 2m); // 2.5
余りを求める場合は % を使います。
C#Console.WriteLine(5 % 2); // 1
切り捨て、切り上げ、四捨五入をしたい場合は、目的に応じて Math.Floor、Math.Ceiling、Math.Round を使います。
C#Console.WriteLine(Math.Floor(2.8)); // 2
Console.WriteLine(Math.Ceiling(2.1)); // 3
Console.WriteLine(Math.Round(2.5)); // 2
また、0で割るとエラーや意図しない結果になるため、割る前に0チェックを行うことが大切です。
C#if (denominator != 0)
{
Console.WriteLine(numerator / denominator);
}
else
{
Console.WriteLine("0で割ることはできません");
}
C#の割り算を正しく扱うには、次のポイントを押さえておきましょう。
C#// int同士は整数の割り算
int result1 = 5 / 2;
// 小数を出すならdoubleにキャスト
double result2 = (double)5 / 2;
// 正確な小数計算ならdecimal
decimal result3 = 5m / 2m;
// 余りは%
int result4 = 5 % 2;
C#の割り算は、型、余り、丸め処理を理解すれば難しくありません。特に初心者のうちは、「int同士の割り算では小数が消える」という点を意識してコードを書くようにしましょう。

