除算しようとしまし(float)200 / (float)500
たが、結果は 0.0 です。これはなぜで、どのようにして結果として 0.4 を得ることができるのでしょうか? どうもありがとう。
4 に答える
3
これは非常によくある間違いであり、すべてのプログラマーが少なくとも1回はそれを行います。除算演算子には2種類あり、どちらも同じ記号、積分点と浮動小数点を使用します。コンパイラは、オペランドのタイプに基づいてどちらを使用するかを選択します。左側と右側の両方のオペランドが整数の場合、整数の除算が得られます。マシンコードのidiv命令。これはゼロに切り捨てられ、積分結果を生成します。
少なくとも1つのオペランドが浮動小数点になるとすぐに、マシンコードでfdiv命令を取得し、探している結果を取得します。質問で行ったように、(float)または(double)にキャストするだけで十分です。そのうちの1つをキャストするだけです。または、200fや200.0などの浮動小数点リテラルを使用します
于 2010-03-31T08:22:44.577 に答える
2
それ無理。私は次のシナリオを考えることができます:
- 結果を整数にキャストしています。この場合、0に切り捨てられます
- 200と500は実際には浮動小数点数ではなく、整数です。結果はデフォルトで整数になります
- フロートを印刷する方法は、フロートを整数に変換するか、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 に答える