Redondeo y escala
Controle la precisión y los modos de redondeo
Redondeo y escala es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
Escala y precisión
Cada BigDecimal tiene una escala, es decir, el número de dígitos situados a la derecha del separador decimal. El valor 12.340 tiene una escala de 3. Controlar la escala permite mostrar el dinero con exactamente dos decimales.
Consultar la escala
Llame a scale() para ver cuántas posiciones decimales contiene un valor y a precision() para consultar el número total de dígitos significativos.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.340");
System.out.println(v.scale());
System.out.println(v.precision());
}
}setScale para fijar los decimales
setScale obliga a que un valor tenga un número determinado de posiciones decimales. Debe pasar un RoundingMode si es necesario redondear.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.3456");
System.out.println(v.setScale(2, RoundingMode.HALF_UP));
}
}HALF_UP, el modo habitual
RoundingMode.HALF_UP redondea al valor más cercano y, en caso de empate, se aleja de cero. Es el redondeo cotidiano que se aprende en la escuela.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_UP));
System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_UP));
}
}HALF_EVEN, el redondeo bancario
HALF_EVEN redondea los empates hacia el dígito par más cercano. Esto reduce el sesgo en muchos redondeos, por lo que los bancos lo prefieren.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_EVEN));
System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_EVEN));
}
}CEILING y FLOOR
CEILING siempre redondea hacia el infinito positivo y FLOOR siempre hacia el infinito negativo, independientemente del dígito que se descarte.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("2.1");
System.out.println(v.setScale(0, RoundingMode.CEILING));
System.out.println(v.setScale(0, RoundingMode.FLOOR));
}
}DOWN y UP
DOWN trunca hacia cero, mientras que UP siempre redondea alejándose de cero. DOWN es un truncamiento sencillo.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("2.9");
System.out.println(v.setScale(0, RoundingMode.DOWN));
System.out.println(v.setScale(0, RoundingMode.UP));
}
}Redondear durante la división
La división puede producir decimales infinitos, por lo que debe proporcionar la escala y el modo de redondeo directamente en la llamada a divide.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal bill = new BigDecimal("100.00");
BigDecimal people = new BigDecimal("3");
System.out.println(bill.divide(people, 2, RoundingMode.HALF_UP));
}
}Eliminar los ceros finales
stripTrailingZeros elimina los ceros sobrantes. Combínelo con toPlainString para evitar la notación científica en la salida.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.300");
System.out.println(v.stripTrailingZeros().toPlainString());
}
}Dar formato al dinero
Para mostrar los valores, establezca la escala en 2 con HALF_UP para que los precios siempre muestren dos decimales, incluso cuando sean cantidades enteras.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal amount = new BigDecimal("7");
System.out.println(amount.setScale(2, RoundingMode.HALF_UP));
}
}Elegir un modo
Elija HALF_UP para el redondeo habitual destinado a los usuarios y HALF_EVEN en contabilidad para reducir el sesgo acumulado. Especifique siempre un modo para que el código nunca lance una excepción con resultados no terminantes.
Comprobación rápida
Compruebe sus conocimientos sobre la escala y el redondeo.
Resumen
Ha aprendido a controlar la precisión:
- La escala es el número de dígitos posteriores al separador decimal
setScalefija los decimales y requiere unRoundingModeHALF_UPes el redondeo cotidiano yHALF_EVENes el redondeo bancarioCEILING,FLOOR,UPyDOWNcubren el redondeo direccional- Especifique siempre un modo en las divisiones para evitar excepciones
Preguntas frecuentes
¿La lección «Redondeo y escala» es gratis?
Sí — el texto completo de «Redondeo y escala» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Redondeo y escala»?
Controle la precisión y los modos de redondeo Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Redondeo y escala»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.