1

除算しようとしまし(float)200 / (float)500たが、結果は 0.0 です。これはなぜで、どのようにして結果として 0.4 を得ることができるのでしょうか? どうもありがとう。

4

4 に答える 4

3

これは非常によくある間違いであり、すべてのプログラマーが少なくとも1回はそれを行います。除算演算子には2種類あり、どちらも同じ記号、積分点と浮動小数点を使用します。コンパイラは、オペランドのタイプに基づいてどちらを使用するかを選択します。左側と右側の両方のオペランドが整数の場合、整数の除算が得られます。マシンコードのidiv命令。これはゼロに切り捨てられ、積分結果を生成します。

少なくとも1つのオペランドが浮動小数点になるとすぐに、マシンコードでfdiv命令を取得し、探している結果を取得します。質問で行ったように、(float)または(double)にキャストするだけで十分です。そのうちの1つをキャストするだけです。または、200fや200.0などの浮動小数点リテラルを使用します

于 2010-03-31T08:22:44.577 に答える
2

それ無理。私は次のシナリオを考えることができます:

  1. 結果を整数にキャストしています。この場合、0に切り捨てられます
  2. 200と500は実際には浮動小数点数ではなく、整数です。結果はデフォルトで整数になります
  3. フロートを印刷する方法は、フロートを整数に変換するか、10進値を表示しません。
于 2010-03-31T08:01:22.993 に答える
2

ここでは何も問題はありません-私はアンドレアスと一緒です。

    Console.WriteLine((float)200 / (float)500);

    Console.WriteLine("Press any key to continue");
    Console.ReadKey(true);

結果:

0.4

何かキーを押すと続行します

于 2010-03-31T08:04:27.333 に答える