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;
}
5 / 2
が小数を扱わない整数同士の計算として計算されて、小数点以下が切り捨てられる- ①の計算結果をdouble型にキャストする。
- ①の計算結果は型キャストをする前から計算されており、①の計算結果「2」がdouble型に変換される
- double型に変換された「2」が代入される
このような処理になるため、カッコでまとめて型キャストするのはダメなのです。初心者がやってしまいがちなミスなので注意しましょう。