Я использую java.util.Random для генерации случайного гауссова. Мне нужно преобразовать этот гауссовский в значение float. Однако гауссовский является двойным, поэтому мне нужно как-то округлить, а затем преобразовать его в float. Мне нужно округлить до ближайшего целого числа, округляя. Вот мой вопрос: как?
Как округлить двойное до ближайшего целого числа, а затем преобразовать в поплавок?
Ответ 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
Привет
Ответ 3
Ответ 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);
}
}