2016-10-26 3 views
0

私は、次のコードを入力する(そしてコンパイルの問題か何かを持っていません):フロートを使用しても5/2の結果が「2」になるのはなぜですか?

float y = 5/2; 
printf("%f\n", y); 

出力は単純だった:2.00000

私の数学は間違っていないですが、それは何ですか?あるいは、私は/演算子に間違っていますか?それは分裂を意味しないのですか?そして5/2は2.5に等しくなければならない?

ご協力いただきありがとうございます。

+4

キャストタイプしなければならない2.0

です。しかし、オペランド、したがってオペレーション自体は整数です。 –

+0

[関連する質問はこちら](https://stackoverflow.com/questions/27674295/why-do-we-separately-cast-to-float-in-an-integer-division) – WhozCraig

答えて

3

5は、intであり、2は、intである。したがって、5/2は整数除算を使用します。 55.0f(または22.0fとする)に置き換え、intのいずれかをfloatに置き換えると、浮動小数点除算が得られ、2.5が得られます。また、分子または分母のいずれかを明示的にキャストすることで同じ効果を達成することもできます(例:((float) 5)/2)。

+0

'5.'または' 2.'が行います。 – alk

+3

@alk:私はちょうどゼロを持っているのが好きです。彼らは本当の目的を果たさないのですが、私の衰えている視力のために、私はしばしば '.'を逃してしまいます。 –

+2

私はおそらく2つの目を持っているので、 '.00'を使うことを提案します。 ;-) – alk

1

フロートを使用しても5/2が「2」になるのはなぜですか?

あなたがない "使用float" ではないので。 5/2は整数除算です。その結果(2)はfloatに暗黙的に変換され、2.(ドットを念頭に置く)になります。

0

適切なタイプキャストが必要です。

float y = (float) 5/2 

プログラムは数字をintとして扱います。
intを2つに分割し、これをfloatに書き込んでいます。したがって、答えは*結果は* `float`あるので、あなたが

関連する問題