Java.util.Randomを使用してランダムガウス分布を生成しています。このガウスを浮動小数点値に変換する必要があります。ただし、gaussianはdoubleなので、丸めてからfloatに変換する方法が必要です。切り上げて、最も近い整数に丸める必要があります。私の質問は次のとおりです。
float b = (float)Math.ceil(a);
またはfloat b = (float)Math.round(a);
「最も近い整数に丸める」(切り上げ)または「切り上げ」(天井)のどちらを意味するかに応じて。
Doubleをfloatに変換する際の精度の低下に注意してください。ただし、ここでは問題になりません。
以下に簡単な例を示します。
public class One {
/**
* @param args
*/
public static void main(String[] args) {
double a = 4.56777;
System.out.println( new Float( Math.round(a)) );
}
}
結果と出力は次のようになります。 5.0
_double a = 4.56777
の開始値に最も近い上限フロート
この場合、ラウンドの使用が推奨されるのは、double
値を取り、long
値全体を提供するためです。
よろしく
価値があるもの:
次の表に示すように、任意の入力に最も近い整数は、入力と次の整数間の距離に応じてMath.ceilまたはMath.floorを使用して計算できます
+-------+--------+
| input | output |
+-------+--------+
| 1 | 0 |
| 2 | 0 |
| 3 | 5 |
| 4 | 5 |
| 5 | 5 |
| 6 | 5 |
| 7 | 5 |
| 8 | 10 |
| 9 | 10 |
+-------+--------+
private int roundClosest(final int i, final int k) {
int deic = (i % k);
if (deic <= (k / 2.0)) {
return (int) (Math.floor(i / (double) k) * k);
} else {
return (int) (Math.ceil(i / (double) k) * k);
}
}