Как округлить двойное число до ближайшего целого числа, а затем преобразовать в число с плавающей точкой? - PullRequest
29 голосов
/ 23 ноября 2011

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

Ответы [ 4 ]

54 голосов
/ 23 ноября 2011

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

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

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

8 голосов
/ 23 ноября 2011

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

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

Привет

3 голосов
/ 23 ноября 2011
0 голосов
/ 17 мая 2017

За что стоит:

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