【C言語】小数点以下を切り捨てないように計算する方法

C言語で整数同士の割り算をすると、小数点以下が切り捨てられて整数になってしまいます。

例えば5÷2は普通に計算すると2.5が答えですが、C言語で5÷2をすると答えが2になります。

これは、整数同士の計算は小数点以下を扱わないint型の整数値として計算されるために起こる仕様です。

そのため、整数同士の計算でも小数点以下を計算結果に含めたい・正しく計算したい場合は小数を扱えるdouble型・float型に変換して行う必要があります。

double型・float型に変換して計算するといってもやり方は簡単です。

数値に小数の値があるかどうか関わらず、10.0のように小数値を与えた状態で計算するだけです。

例えば5÷3だったら5.0 / 3.0のように記述します。

int main() {
	double result = 5/0 / 2.0; //2.5
	return 0;
}

計算結果を代入する場合はdouble型・float型のどちらかに代入するようにしてください。整数しか扱えないint型などに代入すると、代入時に小数点以下が切り捨てられます。

また型キャストを使った方法でも可能です。

int main() {
	int num1 = 5;
	int num2 = 2;
	double result = (double)num1 / (double)num2;
	return 0;
}

変数の場合は計算時に3.0などの数値を直接指定できないので、(double)num1のように型キャストして計算するといいでしょう。

ちなみに以下の書き方は間違いです。

int main() {
	int num1 = 5;
	int num2 = 2;
	double result = (double)(num1 / num2);
	return 0;
}
  1. 5 / 2が小数を扱わない整数同士の計算として計算されて、小数点以下が切り捨てられる
  2. ①の計算結果をdouble型にキャストする。
  3. ①の計算結果は型キャストをする前から計算されており、①の計算結果「2」がdouble型に変換される
  4. double型に変換された「2」が代入される

このような処理になるため、カッコでまとめて型キャストするのはダメなのです。初心者がやってしまいがちなミスなので注意しましょう。

こちらの記事も読まれています

カテゴリー: