Siempre redondea un doble
Puedes usar Math.ceil()
método.
Consulte el enlace de JavaDoc:https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#ceil(double)
De los documentos:
techo
public static double ceil(double a)
Devuelve el valor doble más pequeño (más cercano a infinito negativo) que es mayor o igual que el argumento y es igual a un número entero matemático. Casos especiales:
- Si el valor del argumento ya es igual a un número entero matemático, entonces el resultado es el mismo que el argumento.
- Si el argumento es NaN o 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, el resultado es cero negativo.
Tenga en cuenta que el valor de Math.ceil(x) es exactamente el valor de -Math.floor(-x).
Parámetros:
- a - un valor.
Devoluciones:
El valor de punto flotante más pequeño (más cercano al infinito negativo) que es mayor o igual que el argumento y es igual a un número entero matemático.
En palabras simples,
Math.ceil
siempre redondeará hacia ARRIBA o como se dijo anteriormente, en exceso .Math.round
redondeará hacia arriba o hacia abajo dependiendo de los decimales.- Si el decimal es igual o mayor que 5 , entonces se redondea hacia arriba .
- decimal => 5. (1,5 =2)
- Si el decimal es menos de 5 , entonces se redondea hacia abajo .
- decimal <5. (1,45 =1)
- Si el decimal es igual o mayor que 5 , entonces se redondea hacia arriba .
Ejemplos de Math.ceil
y Math.round
:
El siguiente código devolvería:
Costo, sin Ceil 2,2 y con Ceil 3 (int), 3,0 (doble). Si lo redondeamos:2
int m2 = 2200;
double rate = 1000.0;
int costceil = (int)Math.ceil(m2/rate);
double costdouble = m2/rate;
double costdoubleceil = Math.ceil(m2/rate);
int costrounded = (int)Math.round(m2/rate);
System.out.println("Cost, without Ceil "+costdouble+" and with Ceil "+
costceil+"(int), "+costdoubleceil+"(double). If we round it: "+costrounded);
Si cambiamos el valor de m2 a por ejemplo 2499 , el resultado seria:Costo, sin Ceil 2.499 y con Ceil 3 (int), 3.0 (doble). Si lo redondeamos:2
Si cambiamos el valor de m2 a por ejemplo 2550 , el resultado sería:
Costo, sin Ceil 2,55 y con Ceil 3 (int), 3,0 (doble). Si lo redondeamos:3
Espero eso ayude. (Información extraída de respuestas anteriores, solo quería dejarlo más claro).
tl;dr
BigDecimal( "3.2" ).setScale( 0 , RoundingMode.CEILING )
4
BigDecimal
Si desea precisión en lugar de rendimiento, evite la tecnología de coma flotante. Eso significa evitar float
, Float
, double
, Double
. Para mayor precisión, use BigDecimal
clase.
En un BigDecimal
, configure la escala, el número de dígitos a la derecha del lugar decimal. Si no desea una fracción decimal, establezca la escala en cero. Y especifique un modo de redondeo. Para redondear siempre una fracción hacia arriba, use RoundingMode.CEILING
, documentado como:
Modo de redondeo para redondear hacia el infinito positivo. Si el resultado es positivo, se comporta como para RoundingMode.UP; si es negativo, se comporta como RoundingMode.DOWN. Tenga en cuenta que este modo de redondeo nunca disminuye el valor calculado. Entonces, por ejemplo, 1.1 se convierte en 2 y tu 3.2 se convierte en 4.
BigDecimal bd = new BigDecimal( "3.2" ) ;
BigDecimal bdRounded = bd.setScale( 0 , RoundingMode.CEILING ) ;
String output = bdRounded.toString() ;
System.out.println( "bdRounded.toString(): " + bdRounded ) ; // 4
4
Vea este código ejecutado en vivo en IdeOne.com.