どうすれば常に adouble
を に切り上げint
、決して切り捨てないことができるでしょうか。私は知ってMath.round(double)
いますが、常に切り上げたいです。だった場合は3.2
、4 に丸められます。
7 に答える
メソッドを使用できますMath.ceil()
。
JavaDoc リンクを参照してください: https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#ceil(double)
ドキュメントから:
天井
public static double ceil(double a)
引数以上で、数学的な整数に等しい最小の (負の無限大に最も近い) double 値を返します。特殊なケース:
- 引数の値が既に数学上の整数に等しい場合、結果は引数と同じになります。
- 引数が NaN または無限大または正のゼロまたは負のゼロの場合、結果は引数と同じになります。
- 引数値がゼロ未満で -1.0 より大きい場合、結果は負のゼロになります。
Math.ceil(x) の値は正確に -Math.floor(-x) の値であることに注意してください。
パラメーター:
- a - 値。
戻り値:
引数以上で、数学上の整数に等しい最小 (負の無限大に最も近い) 浮動小数点値。
私の方法は比較的単純です。うまくいくことを願っています。
私の場合、3 つのアイテムしか保持できないオブジェクトの行があり、アイテムを収容するために必要な行数を調整する必要があります。
したがって、Double numberOfRows がいくつかあるので、numberOfRows.intValue() を使用して numberOfRows の int 値を取得します。
取得した int 値が numberOfRows より小さい場合は、numberOfRows に 1 を追加して切り上げます。それ以外の場合は、numberOfRows.intValue() から取得した値が必要な答えです。
テストするために、この単純な for ループを書きました。
for(int numberOfItems = 0; numberOfItems < 16; numberOfItems++) {
Double numberOfRows = numberOfItems / 3.0;
System.out.println("Number of rows are: " + numberOfRows);
System.out.println("Number of items are: " + numberOfItems);
if(numberOfRows.intValue() < numberOfRows) {
System.out.println("int number of rows are: " + (numberOfRows.intValue() + 1));
}
else {
System.out.println("int value of rows are: " + numberOfRows.intValue());
}
System.out.println();
System.out.println();
}
private int roundUP(double d){
double dAbs = Math.abs(d);
int i = (int) dAbs;
double result = dAbs - (double) i;
if(result==0.0){
return (int) d;
}else{
return (int) d<0 ? -(i+1) : i+1;
}
}
よくできた !;)