Redondeo de números en Java: cómo obtener n decimales

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Cómo redondear un número a N decimales en Java? Análisis completo con ejemplos



El redondeo de números es una de esas tareas que enfrenta todo desarrollador Java, ya sea un principiante mostrando precios en consola o un ingeniero experimentado trabajando con cálculos financieros. Parecería que no podría ser más sencillo. Pero en la práctica, Java redondear double esconde no pocas trampas: desde "mágicos" errores de precisión hasta la elección de la herramienta correcta para cada tarea.



En este artículo analizaremos todas las formas principales de cómo redondear un número en Java a una cantidad determinada de decimales. Aprenderás cuándo usar Math.round, por qué Double es peligroso en cálculos financieros, y por qué BigDecimal es tu mejor amigo cuando se trata de dinero. ¡Allá vamos!



El problema: ¿por qué el simple redondeo en Java no siempre es simple?



Antes de pasar a las soluciones, entendamos la raíz del problema. El tipo double en Java (como en la mayoría de los lenguajes) almacena números de punto flotante en formato binario. Debido a esto, muchos decimales (por ejemplo, 0.1 o 0.2) no pueden representarse con exactitud. Intenta ejecutar:



System.out.println(0.1 + 0.2); // Mostrará 0.30000000000000004


Para mostrar en pantalla puede no ser crítico, pero para cálculos es un desastre. Por lo tanto, Java redondear a 2 decimales (o cualquier otra cantidad) debe hacerse de forma consciente.



Método 1: Redondeo matemático con Math.round



La forma más directa es usar Math.round(). Redondea el número al entero más cercano. Para obtener N decimales, "desplazamos" el punto decimal, redondeamos y luego lo desplazamos de vuelta.



Ejemplo: redondear double a 2 decimales:



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

// Usodouble number = 3.14159265;double rounded = roundWithMathRound(number, 2);System.out.println(rounded); // 3.14


Ventajas: Simplicidad, sin dependencia de bibliotecas externas.
Desventajas: Funciona con double, por lo que aún está sujeto a errores de precisión en valores límite. No es adecuado para finanzas.



Método 2: Formateo con DecimalFormat



La clase DecimalFormat del paquete java.text permite no solo redondear, sino también formatear el número de forma elegante como cadena. Es ideal para interfaces de usuario e informes.



import java.text.DecimalFormat;

public static String formatWithDecimalFormat(double value, int places) { // Creamos la plantilla: #.00 para dos decimales StringBuilder pattern = new StringBuilder("#."); for (int i = 0; i < places; i++) { pattern.append("0"); } DecimalFormat df = new DecimalFormat(pattern.toString()); return df.format(value);}

// UsoString result = formatWithDecimalFormat(2.71828, 3);System.out.println(result); // 2.718


También puedes configurar el modo de redondeo (RoundingMode):

df.setRoundingMode(RoundingMode.HALF_UP); // Redondeo matemático estándar


Importante: DecimalFormat devuelve un String, no un número. Si necesitas un double para cálculos posteriores, este método no es adecuado.



Método 3: BigDecimal — el estándar de oro de la precisión



Cuando la precisión es crítica (finanzas, cálculos científicos), entra en escena BigDecimal. Permite controlar cada dígito y evitar los errores de double.



import java.math.BigDecimal;import java.math.RoundingMode;

public static BigDecimal roundWithBigDecimal(double value, int places) {\

Blogs

Book Recommendations