2012-01-06 18 views
36

¿cómo puedo redondear un número de coma flotante al siguiente valor entero en Java? Supongamosredondear un número de coma flotante al siguiente valor entero en java

2,1 -> 3

3.001 -> 4

4,5 -> 5

7.9 -> 8

+3

java.lang.Math.ceil? – Mysticial

+1

Gracias ... igual me pasó a mí también ...' (int) Math.ceil (i/j) 'donde' i, j son int' ... si 'i/j' era' 2.1' me regresó '2' en lugar de' 3' como esperaba 'Math.ceil'. sin embargo, si mantengo 'j' como' doble' funcionó como se esperaba. – Vikram

+2

Oye, Vikram, esto sucede porque la división entre enteros devuelve un número entero. Es un poco raro al principio, así es como funciona. Si quieres decimales, uno de los lados de la división debe ser un float o double – enTropy

Respuesta

30

Usted debe mirar el techo redondeando en los paquetes matemáticos de Java: Math.ceil


EDITAR: Agregó el javadoc para Math.ceil. Puede valer la pena leer todo el método en Matemáticas.

http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#ceil%28double%29

public static double ceil(double a)

Devuelve el más pequeño (el más cercano al infinito negativo) doble valor que es mayor que o igual al argumento y es igual a un número entero matemático . Casos especiales:

  • Si el valor del argumento ya es igual a un entero matemático, el resultado es el mismo que el argumento.
  • Si el argumento es NaN o un infinito o cero positivo o cero negativo, entonces el resultado es el mismo que el argumento.
  • Si el valor del argumento es menor que cero pero mayor que -1.0, entonces el resultado es cero negativo.

Tenga en cuenta que el valor de Math.ceil(x) es exactamente el valor de -Math.floor(-x).

+0

¿podrías explicarlo? –

+4

Math.ceil (2.1) producirá 3. – Steven

+0

muchas gracias –

7

Ver

float a=10.34f,b=45.678f; 

System.out.println((int)Math.ceil(a)); 
System.out.println((int)Math.ceil(b)); 

salida

11 
46 
+1

Math.ceil (5/2) es 2.0 debería ser 3 ?? – GaneshP

+5

@GaneshP: Es porque tanto '5' como' 2' se consideran enteros. Por lo tanto, la aritmética entera entra en juego. Bucear como dijiste, 'Math.ceil (5/2)' daría un resultado entero que es '2' (los números enteros no pueden acomodar una parte fraccional) por lo tanto' 2' se pasa como un argumento para '' cell() ' método que luego produce '2' - techo de' 2' es '2.0' como obvio. Si en lugar de eso hubieras hecho uno o ambos 'float' o' double', habrías visto '3.0' como' Math.ceil (5/2D) ',' Math.ceil (5D/2D) ',' Math.ceil (5/2F) ',' Math.ceil (5F/2F) 'o incluso' Math.ceil (5.0/2.0) 'etc. – Tiny

16

probar esto

float a = 4.5f; 

int d = (int) Math.ceil(a); 

System.out.println(d); 
9

tuve el mismo problema por el que todavía estaba recibiendo el valor int menor. Era la división, no el Math.ceil. Tienes que agregar un molde (float) a los ints. Así es como lo arreglé:

int totalNumberOfCachedData = 201; 
int DataCountMax = 200; 

float ceil =(float) totalNumberOfCachedData/(float)DataCountMax; 
int roundInt = (int) Math.ceil(ceil); 

Esto me dará 2 por el valor de roundInt.

+0

Exactamente lo que necesito. –

2

estoy usando esto:

public static int roundDoubleToUpperInt(double d){ 
    return (d%1==0.0f)?(int)d:(int)(d+1); 
} 
0

Si ayuda a alguien, aquí es cómo conseguir este trabajo:

int arraySize = 3; 
int pageSize = 10; 
int pagesQty = (int) Math.ceil(arraySize/(float) pageSize); 

System.out.println(pagesQty); 

//Displays 1 

divisor debe ser un flotador con el fin de funcionar correctamente.

Cuestiones relacionadas