私は、次のコードを入力する(そしてコンパイルの問題か何かを持っていません):フロートを使用しても5/2の結果が「2」になるのはなぜですか?
float y = 5/2;
printf("%f\n", y);
出力は単純だった:2.00000
私の数学は間違っていないですが、それは何ですか?あるいは、私は/演算子に間違っていますか?それは分裂を意味しないのですか?そして5/2は2.5に等しくなければならない?
ご協力いただきありがとうございます。
私は、次のコードを入力する(そしてコンパイルの問題か何かを持っていません):フロートを使用しても5/2の結果が「2」になるのはなぜですか?
float y = 5/2;
printf("%f\n", y);
出力は単純だった:2.00000
私の数学は間違っていないですが、それは何ですか?あるいは、私は/演算子に間違っていますか?それは分裂を意味しないのですか?そして5/2は2.5に等しくなければならない?
ご協力いただきありがとうございます。
5
は、int
であり、2
は、int
である。したがって、5/2
は整数除算を使用します。 5
を5.0f
(または2
を2.0f
とする)に置き換え、int
のいずれかをfloat
に置き換えると、浮動小数点除算が得られ、2.5
が得られます。また、分子または分母のいずれかを明示的にキャストすることで同じ効果を達成することもできます(例:((float) 5)/2
)。
フロートを使用しても5/2が「2」になるのはなぜですか?
あなたがない "使用float
" ではないので。 5/2
は整数除算です。その結果(2
)はfloat
に暗黙的に変換され、2.
(ドットを念頭に置く)になります。
適切なタイプキャストが必要です。
float y = (float) 5/2
プログラムは数字をint
として扱います。
int
を2つに分割し、これをfloat
に書き込んでいます。したがって、答えは*結果は* `float`あるので、あなたが
キャストタイプしなければならない2.0
です。しかし、オペランド、したがってオペレーション自体は整数です。 –
[関連する質問はこちら](https://stackoverflow.com/questions/27674295/why-do-we-separately-cast-to-float-in-an-integer-division) – WhozCraig