質問: %f",ans) 仕様ですか? 大変申し訳ありません。よろしくお願いします。
回答: 一言で言えば、仕様です。 ふたつの側面がありますが。 まずひとつ。cでは、int 型通しの演算の結果は、int です。 ですから、 a / b の計算結果は、int になります。 次、 ans = a / b ; は、一見、ans が float なので、float 型の結果が得られそうですが、右辺が int なので、float = int という代入が発生しているに過ぎません。 このため、 a / b の結果が(int として) 0 ans = 0; という代入が行われて、ans の結果はゼロになります。 これを防ぐためには、a か b のいずれかを float にしてやればいいわけで、 ans = (float)a / b; ans = a / (float)b; のいずれも答えは、0.5 になります。 これは、int と float の演算は、「int の方を float に変換した上で計算して、結果は float」という決まりだからです。 ans = (float)a / (float)b; でも同じですね。 ただ、 ans = (float)(a / b); では結果はやはりゼロになります。 というか、この場合は、 ans = a / b; と同じことです。 あと、普通の場合、float を使うよりは、double を使った方が良いと思います。