2 つの整数の除算を次の整数に丸める正しい方法は何ですか?
int a = 3;
int b = 2;
a / b = ? //should give 2
進むべき道はMath.ceil()
正しいですか?
いいえ、Math.ceil()
問題が早期に発生するため、単独では機能しません。a
とb
は両方とも整数であるため、それらを除算すると、除算の実際の結果の下限である整数に評価されます。a = 3
との場合b = 2
、結果は1
です。1 つの上限も 1 つです。したがって、目的の結果が得られません。
最初に部門を修正する必要があります。オペランドの 1 つを浮動小数点数にキャストすると、整数以外の結果が得られます。Math.ceil
次に、それを丸めるために使用できます。このコードは動作するはずです:
Math.ceil((double)a / b);
この式を使用できます (a と b が正であると仮定)
(a+b-1)/b
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
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;