C#の割り算で小数・余り・切り捨てを正しく扱う方法【初心者向け】

はじめに

C#で割り算をするとき、初心者が特につまずきやすいのが「小数が出ない」「余りの求め方が分からない」「切り捨てと四捨五入の違いが分からない」といったポイントです。

例えば、次のようなコードを書いたとします。

C#
int result = 5 / 2;
Console.WriteLine(result);

数学では「5 ÷ 2 = 2.5」ですが、C#ではこの結果は 2 になります。

これはC#の割り算が、計算に使う値の「型」によって結果が変わるためです。C#では intdoubledecimal などの型を正しく理解して使い分けることが大切です。

この記事では、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 になります。

小数を出したい場合は、割り算をする前に doubledecimal に変換する必要があります。

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で割り算する場合

小数を含む割り算をしたい場合は、doubledecimal を使います。

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 になります。

小数を正しく出すには、割り算をする前に doubledecimal に変換する必要があります。

3-1. int同士の割り算では小数点以下が切り捨てられる

int 同士の割り算では、小数点以下が切り捨てられます。

C#
int a = 10;
int b = 4;

Console.WriteLine(a / b);

実行結果は次の通りです。

C#
2

10 ÷ 42.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 と書くことで、adouble として扱います。

片方が 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の使い分け

doubledecimal はどちらも小数を扱えますが、用途が異なります。

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

これは、82 で割り切れることを表しています。

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 と書くことで、adouble として扱っています。

次のように、割る数側をキャストしても同じです。

C#
double result = a / (double)b;

ただし、次の書き方では小数になりません。

C#
double result = (double)(a / b);

この場合、先に a / bint 同士で計算され、その後で 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

5int として扱われますが、5.0double として扱われます。

初心者のうちは、小数を出したい場合は次のように書くと分かりやすいです。

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;

また、decimaldouble を混ぜて計算しようとするとエラーになることがあります。

C#
decimal price = 100m;
double rate = 0.1;

var result = price * rate;

decimaldouble はそのまま混ぜて計算できません。

金額計算では、両方を 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#の割り算サンプルを紹介します。

割り算は、平均値、パーセント、ページ数、金額計算、リスト処理など、さまざまな場面で使われます。

基本の考え方は同じですが、目的によって intdoubledecimalMath.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 / total0 になってしまうため、結果も 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.Count0 になるため、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 ÷ 20.5 ですが、int 同士の割り算では小数点以下が切り捨てられるため、結果は 0 になります。

正しく小数を出すには、次のようにします。

C#
double result = (double)a / b;

実行結果は次の通りです。

C#
0.5

9-2. C#で小数点以下を表示するには?

割り算をする前に、どちらか一方を doubledecimal に変換します。

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

小数を出したい場合は、どちらか一方を doubledecimal に変換します。

C#
Console.WriteLine((double)5 / 2); // 2.5
Console.WriteLine(5m / 2m); // 2.5

余りを求める場合は % を使います。

C#
Console.WriteLine(5 % 2); // 1

切り捨て、切り上げ、四捨五入をしたい場合は、目的に応じて Math.FloorMath.CeilingMath.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同士の割り算では小数が消える」という点を意識してコードを書くようにしましょう。