Redondeo de números de punto flotante en Java

JavaBeginner
Practicar Ahora

Introducción

Redondear un número significa obtener un valor aproximado de él. En Java, hay varias formas de redondear un número de punto flotante. En este laboratorio (lab), aprenderemos cómo redondear números utilizando diferentes métodos en Java.

Redondeo utilizando el método printf()

Podemos utilizar el método System.out.printf() para imprimir el número redondeado en la consola. Podemos especificar el número de decimales que queremos redondear utilizando modificadores de precisión.

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.printf("Pi: %.2f %n", pi); // prints Pi: 3.14
  System.out.printf("One Third: %.3f %n", oneThird); // prints One Third: 0.333
  System.out.printf("Gravitation Acceleration(g): %.0f", g); // prints Gravitation Acceleration(g): 10
}

Para ejecutar el código, abre la terminal y ve al directorio donde se encuentra el archivo de código. Luego, compila el código utilizando javac filename.java. Después, ejecútalo utilizando java filename.

Redondeo utilizando el método DecimalFormat()

Podemos utilizar la clase DecimalFormat para especificar un patrón en el que queremos formatear el número. Podemos usar símbolos de numeral (#) para especificar el número de decimales, y luego podemos utilizar el método format() para redondear los dígitos.

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  DecimalFormat d1 = new DecimalFormat("#.##");
  DecimalFormat d2 = new DecimalFormat("#.###");
  DecimalFormat d3 = new DecimalFormat("#");

  System.out.println("Pi: " + d1.format(pi)); // prints Pi: 3.14
  System.out.println("One Third: " + d2.format(oneThird)); // prints One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + d3.format(g)); // prints Gravitation Acceleration(g): 10
}

Para ejecutar el código, abre la terminal y ve al directorio donde se encuentra el archivo de código. Luego, compila el código utilizando javac filename.java. Después, ejecútalo utilizando java filename.

Redondeo utilizando el método Math.round()

Podemos utilizar Math.round() para redondear números decimales. Se puede utilizar cuando queremos redondear un número a cero decimales.

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.println("Pi: " + Math.round(pi)); // prints Pi: 3
  System.out.println("One Third: " + Math.round(oneThird)); // prints One Third: 0
  System.out.println("Gravitation Acceleration(g):" + Math.round(g)); // prints Gravitation Acceleration(g): 10
}

Para ejecutar el código, abre la terminal y ve al directorio donde se encuentra el archivo de código. Luego, compila el código utilizando javac filename.java. Después, ejecútalo utilizando java filename.

Crear un método de redondeo personalizado

Podemos crear nuestro propio método para redondear un número decimal si queremos redondear a más de cero decimales. El siguiente método toma un valor decimal y el número de decimales a los que se desea redondear como parámetros y devuelve el número redondeado.

public static double round(double num, int places) {
  double scale = Math.pow(10, places);
  double roundedNum = Math.round(num * scale) / scale;
  return roundedNum;
}

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.println("Pi: " + round(pi, 2)); // prints Pi: 3.14
  System.out.println("One Third: " + round(oneThird, 3)); // prints One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + round(g, 0)); // prints Gravitation Acceleration(g): 10.0
}

Para ejecutar el código, abre la terminal y ve al directorio donde se encuentra el archivo de código. Luego, compila el código utilizando javac filename.java. Después, ejecútalo utilizando java filename.

Redondeo utilizando BigDecimal

Podemos utilizar el método round() de la clase BigDecimal para redondear un número. El siguiente código demuestra cómo redondear un número decimal utilizando el método round() de la clase BigDecimal.

public static void main(String args[]) {
  BigDecimal pi = new BigDecimal("3.14159265359");
  pi = pi.setScale(4, RoundingMode.HALF_UP); // Rounds to 4 decimal places

  System.out.println("Pi: " + pi); // prints Pi: 3.1416
}

Para ejecutar el código, abre la terminal y ve al directorio donde se encuentra el archivo de código. Luego, compila el código utilizando javac filename.java. Después, ejecútalo utilizando java filename.

Redondear cualquier número que no sea BigDecimal utilizando BigDecimal

Si el número no es de tipo BigDecimal, primero podemos convertirlo y luego redondearlo utilizando la clase BigDecimal. El siguiente método se puede utilizar para redondear números de tipo de datos double.

public static double round(double num, int places) {
  BigDecimal b = new BigDecimal(Double.toString(num));
  b = b.setScale(places, RoundingMode.HALF_UP);
  return b.doubleValue();
}

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  double g = 9.807f;

  pi = round(pi, 4);
  oneThird = round(oneThird, 3);
  g = round(g, 0);

  System.out.println("Pi: " +pi); // prints Pi: 3.1416
  System.out.println("One Third: " + oneThird); // prints One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + g); // prints Gravitation Acceleration(g): 10.0
}

Para ejecutar el código, abre la terminal y ve al directorio donde se encuentra el archivo de código. Luego, compila el código utilizando javac filename.java. Después, ejecútalo utilizando java filename.

Resumen

En este laboratorio (lab), hemos aprendido diferentes métodos para redondear números decimales en Java. Hemos utilizado printf() y DecimalFormat() para redondeos más simples, Math.round() para redondear a cero decimales, BigDecimal para redondeos precisos y DoubleRounder para redondear utilizando la biblioteca decimal4j. También hemos creado un método personalizado para redondear cualquier número decimal a cualquier número de decimales.