5

2 つの整数の除算を次の整数に丸める正しい方法は何ですか?

int a = 3;
int b = 2;

a / b = ? //should give 2

進むべき道はMath.ceil()正しいですか?

4

4 に答える 4

26

いいえ、Math.ceil()問題が早期に発生するため、単独では機能しません。abは両方とも整数であるため、それらを除算すると、除算の実際の結果の下限である整数に評価されます。a = 3との場合b = 2、結果は1です。1 つの上限も 1 つです。したがって、目的の結果が得られません。

最初に部門を修正する必要があります。オペランドの 1 つを浮動小数点数にキャストすると、整数以外の結果が得られます。Math.ceil次に、それを丸めるために使用できます。このコードは動作するはずです:

Math.ceil((double)a / b);
于 2013-10-30T17:00:12.357 に答える
22

この式を使用できます (a と b が正であると仮定)

(a+b-1)/b
于 2013-10-30T16:59:52.393 に答える
4

Math.ceil メソッドの戻り値の型はdoubleで、Math.round の戻り値の型はintです。そのため、結果が整数になる場合は、Math.round メソッドを使用するか、Math.ceil メソッドで問題ありません。

float x = 1654.9874f;     
System.out.println("Math.round(" + x + ")=" + Math.round(x));   
System.out.println("Math.ceil(" + x + ")=" + Math.ceil(x));

出力

Math.round(1654.9874)=1655

Math.ceil(1654.9874)=1655.0
于 2013-10-30T17:19:36.530 に答える
3

2 つの整数 ( としても知られるinteger division) を除算すると、除算の残りが得られます。

3/2 = 1

ceil を使用するには、整数ではない除算を行う必要があります。

値を double (3.0または3d) として宣言するか、分割する前にキャストすることができます。

((double) 3) / ((double) 2) = 1.5

この double 値は ceil で使用できます。

Math.ceil(3.0 / 2.0) = 2.0;
于 2013-10-30T17:00:14.093 に答える