Autor Tema: Redondear dos o más decimales java precision errores bigdecimal ejercic CU00907C  (Leído 2734 veces)

@mayakoski

  • Sin experiencia
  • *
  • Mensajes: 43
    • Ver Perfil
Dejo mi solución propuesta para el ejercicio CU00907C del curso de programación Java avanzada de aprenderaprogramar


Código: [Seleccionar]
package claseCU00907C;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

public class ejercicioCU00907C {
public static void main(String[] args) {
Scanner entradaTeclado = new Scanner(System.in);
double importeInicial;
double porcentajeImpuesto;
System.out.println("Por favor introduzca el importe inicial: ");
importeInicial = entradaTeclado.nextDouble();
System.out.println("Por favor introduzca el porcentaje de impuestos: ");
porcentajeImpuesto = entradaTeclado.nextDouble();
System.out.println("El impuesto a pagar es: " + BigDecimal.valueOf(importeInicial *porcentajeImpuesto/100).setScale(2, RoundingMode.CEILING));
System.out.println("El importe final es: " + BigDecimal.valueOf(importeInicial).add(BigDecimal.valueOf(importeInicial *porcentajeImpuesto/100).setScale(2, RoundingMode.CEILING)));
}

}
« Última modificación: 14 de Agosto 2020, 19:10 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, he revisado este ejercicio y desde mi punto de vista no está correcto.

Si introducimos como importe inicial 0,69 y como porcentaje de impuestos 5 obtenemos esto:

Por favor introduzca el importe inicial: 0,69
Por favor introduzca el porcentaje de impuestos: 5
El impuesto a pagar es: 0.04
El importe final es: 0.73



Sin embargo, el impuesto es 0.0345 que se redondearía a 0.03 en lugar de a 0.04 y el importe final debería ser 0.72 en lugar de 0.73

Por tanto parece que el redondeo no lo hace conforme a lo que pedía el enunciado del ejercicio, y al fallar el redondeo falla el resultado final.

Puede verse una solución correcta del ejercicio en https://aprenderaprogramar.com/foros/index.php?topic=5672.0

Salu2

@mayakoski

  • Sin experiencia
  • *
  • Mensajes: 43
    • Ver Perfil
Gracias la observación, he modificado mi código y realice pruebas con el ejemplo que me remites y con otros valores, me funciono correctamente en mis pruebas

Saludos

Código: [Seleccionar]
package claseCU00907C;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

public class ejercicioCU00907C {
public static void main(String[] args) {
Scanner entradaTeclado = new Scanner(System.in);
double importeInicial;
double porcentajeImpuesto;
System.out.println("Por favor introduzca el importe inicial: ");
importeInicial = entradaTeclado.nextDouble();
System.out.println("Por favor introduzca el porcentaje de impuestos: ");
porcentajeImpuesto = entradaTeclado.nextDouble();
System.out.println("El impuesto a pagar es: " + BigDecimal.valueOf(importeInicial *porcentajeImpuesto/100).setScale(2, RoundingMode.HALF_UP));
System.out.println("El importe final es: " + BigDecimal.valueOf(importeInicial).add(BigDecimal.valueOf(importeInicial *porcentajeImpuesto/100).setScale(2, RoundingMode.HALF_UP)));
}

}

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".