web-dev-qa-db-ja.com

doubleを最も近い整数に丸めてからfloatに変換する方法は?

Java.util.Randomを使用してランダムガウス分布を生成しています。このガウスを浮動小数点値に変換する必要があります。ただし、gaussianはdoubleなので、丸めてからfloatに変換する方法が必要です。切り上げて、最も近い整数に丸める必要があります。私の質問は次のとおりです。

29
JAW1025

float b = (float)Math.ceil(a);またはfloat b = (float)Math.round(a);

「最も近い整数に丸める」(切り上げ)または「切り上げ」(天井)のどちらを意味するかに応じて。

Doubleをfloatに変換する際の精度の低下に注意してください。ただし、ここでは問題になりません。

54
Paul Tomblin

以下に簡単な例を示します。

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値全体を提供するためです。

よろしく

8
VeRo
3
r0ast3d

価値があるもの:

次の表に示すように、任意の入力に最も近い整数は、入力と次の整数間の距離に応じて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);
    }
}