Java redondear cualquier número

146

Parece que no puedo encontrar la respuesta que estoy buscando con respecto a una pregunta simple: ¿cómo redondeo cualquier número al más cercano int?

Por ejemplo, siempre que el número sea 0.2, 0.7, 0.2222, 0.4324, 0.99999, me gustaría que el resultado sea 1.

Hasta ahora tengo

int b = (int) Math.ceil(a / 100);

Sin embargo, no parece estar haciendo el trabajo.

Stevanicus
fuente
¿Por qué está dividiendo por 100 en su código de muestra?
Jon Skeet
14
Apuesto a que atiene el tipo entero.
Nikita Rybak
1
sí, a la derecha es un int ... gracias por señalarlo. 100.0 lo resolvió para mí.
Stevanicus
1
Supongo que lo que quiere es un / 100 redondeado, pero sí, la pregunta podría necesitar alguna aclaración.
Jay
1
NOTA: En esta pregunta, se proporcionan mejores respuestas.
martijnn2008

Respuestas:

289

Math.ceil()es la función correcta para llamar. Supongo que aes un int, lo que haría a / 100realizar aritmética de enteros. Intenta en su Math.ceil(a / 100.0)lugar.

int a = 142;
System.out.println(a / 100);
System.out.println(Math.ceil(a / 100));
System.out.println(a / 100.0);
System.out.println(Math.ceil(a / 100.0));
System.out.println((int) Math.ceil(a / 100.0));

Salidas:

1
1.0
1.42
2.0
2

Ver http://ideone.com/yhT0l

moinudin
fuente
3
esto solo si "a" es doble
L.Grillo
^^ "a" necesita ser un doble o lanzar un doble.
Codificado el
1
aes un inten este ejemplo, y funciona como se sugiere. Al hacer int / floatel resultado es un float, como se demuestra en la salida. Prueba el enlace.
dantiston
16

No sé por qué estás dividiendo entre 100 pero aquí mi suposición int a;

int b = (int) Math.ceil( ((double)a) / 100);

o

int b = (int) Math.ceil( a / 100.0);

fuente
11
int RoundedUp = (int) Math.ceil(RandomReal);

Esto parecía hacer el trabajo perfecto. Trabajado todo el tiempo.

Liehan Els
fuente
2

10 años después, pero ese problema todavía me sorprendió.

Entonces esta es la respuesta para aquellos que son demasiado tarde como yo.

Esto no funciona

int b = (int) Math.ceil(a / 100);

Porque el resultado a / 100 resulta ser un número entero y está redondeado, por lo que Math.ceil no puede hacer nada al respecto.

Tienes que evitar la operación redondeada con esto

int b = (int) Math.ceil((float) a / 100);

Ahora funciona.

Reginaldo Rigo
fuente
0

La forma más fácil de hacer esto es simplemente: recibirás un flotador o un doble y querrás que lo convierta al redondeo más cercano y luego hacerlo System.out.println((int)Math.ceil(yourfloat)); funcionará perfectamente

LouieAdauto
fuente
-3

Asumiendo a como doble y necesitamos un número redondeado sin lugar decimal. Use la función Math.round ().
Esto va como mi solución.

double a = 0.99999;
int rounded_a = (int)Math.round(a);
System.out.println("a:"+rounded_a );

Output : 
a:1
Ankit Chauhan
fuente
1
Esta es una respuesta incorrecta, ya que aquí se pide redondear ARRIBA si a = 0.2 el resultado será 0
Mohamed23gharbi