Подтвердить что ты не робот

Как округлить двойное до ближайшего целого числа, а затем преобразовать в поплавок?

Я использую java.util.Random для генерации случайного гауссова. Мне нужно преобразовать этот гауссовский в значение float. Однако гауссовский является двойным, поэтому мне нужно как-то округлить, а затем преобразовать его в float. Мне нужно округлить до ближайшего целого числа, округляя. Вот мой вопрос: как?

4b9b3361

Ответ 1

float b = (float)Math.ceil(a); или float b = (float)Math.round(a);

В зависимости от того, означает ли вы "округление до ближайшего целого числа" (круглое) или "округление" (ceil).

Остерегайтесь потери точности при преобразовании double в float, но это не должно быть проблемой.

Ответ 2

Вот краткий пример:

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
ближайшая верхняя граница Float до начального значения double a = 4.56777
в этом случае рекомендуется использовать раунд, так как он принимает значения double и предоставляет целые значения long

Привет

Ответ 4

За что стоит:

самое близкое целое к любому заданному входу, как показано в следующей таблице, может быть рассчитано с использованием 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);
    }
}