Java >> Tutorial de Java >  >> Java

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)

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.


Etiqueta Java