3

ある数値を別の数値で割り、すぐに結果を ceil() しようとしています。これらは通常は変数ですが、簡単にするために定数を使いましょう。

次のいずれかを試してみると、4 を取得したいときに 3 が取得されます。

double num = ceil(25/8); // 3
float num = ceil(25/8); // 3
int num = ceil(25/8); // 3

ここのいくつかのスレッド (このスレッドからの nextafter() の提案を試しました) と他のサイトを読みましたが、何が起こっているのかわかりません。私がチェックしたところ、私の変数は私が期待する数値であり、実際に定数を使用して上記を試しましたが、まだ予期しない結果が得られています。

助けてくれてありがとう。私が見逃しているのは単純なものだと確信していますが、現時点では途方に暮れています。

4

2 に答える 2

14

これは、整数演算を行っているためです。ceil25 と 8 はどちらも整数であるため、を呼び出す前の値は 3 です。最初に整数演算を使用して 25/8 が計算され、3 と評価されます。

試す:

double value = ceil(25.0/8);

これにより、コンパイラは定数 25.0 を浮動小数点数として扱います。

明示的なキャストを使用して同じ結果を達成することもできます。

double value = ceil(((double)25)/8);
于 2012-10-16T20:23:14.347 に答える
4

これは、式が引数として ceil 関数に渡される前に評価されるためです。結果が ceil に渡される 10 進数になるように、最初にそれらの 1 つを double にキャストする必要があります。

double num = ceil((double)25/8);
于 2012-10-16T20:25:21.353 に答える