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.


¿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


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);

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

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


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.


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


-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

1
Esta es una respuesta incorrecta, ya que aquí se pide redondear ARRIBA si a = 0.2 el resultado será 0
Mohamed23gharbi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.