Autor Tema: Java redondeo a dos cifras de números decimales con precision Ejercicio CU00907C  (Leído 2530 veces)

Pepote21

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 92
    • Ver Perfil
Hola a todos. Os paso mi código en tres clases. Ejercicio CU00907C del tutorial de java avanzado.

Gracias.

Código: [Seleccionar]
  package practicas.avanzadas;

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

/**
 * Partiendo de un importe inicial y un porcentaje de impuestos a pagar,
 * calcular el porcentaje total y el total a pagar
 * @author pepote21
 * @version 20170129
 */
public class E907_C {
    private BigDecimal impInicial,porcImpuestos,impuesto,impFinal;
   
    public E907_C(){
        impInicial=BigDecimal.valueOf(0.0);
        porcImpuestos=BigDecimal.valueOf(0.0);
        impuesto=BigDecimal.valueOf(0.0);
        impFinal=BigDecimal.valueOf(0.0);
    }

    public BigDecimal getImpInicial() {
        return impInicial;
    }

    public void setImpInicial(BigDecimal impInicial) {
        this.impInicial = impInicial;
    }

    public BigDecimal getPorcImpuestos() {
        return porcImpuestos;
    }

    public void setPorcImpuestos(BigDecimal porcImpuestos) {
        this.porcImpuestos = porcImpuestos;
    }

    public BigDecimal getImpuesto() {
        return impuesto;
    }

    public void setImpuesto(BigDecimal impInicial,BigDecimal porcImpuestos) {
        impuesto=impInicial.multiply(porcImpuestos).divide(BigDecimal.valueOf(100));
        impuesto=impuesto.setScale(2, RoundingMode.HALF_UP);
        System.out.println("El impuesto a pagar es: "+impuesto);
    }

    public BigDecimal getImpFinal() {
        return impFinal;
    }

    public void setImpFinal(BigDecimal impInicial,BigDecimal impuesto) {
        impFinal = impInicial.add(impuesto);
        impFinal=impFinal.setScale(2,RoundingMode.CEILING);
        System.out.println("El importe final es: "+impFinal);
    }
       
}

 
Código: [Seleccionar]
package practicas.avanzadas;
import java.math.BigDecimal;
import java.util.Scanner;
/**
 * entrada de teclado para BigDecimal
 * @author pepote21
 * @version 20170129
 */
public class EntradaDeTecladoE907_C {
    private BigDecimal entrada;
    Scanner sc;
   
    public EntradaDeTecladoE907_C(){
        entrada=BigDecimal.valueOf(0.0);
        sc=new Scanner(System.in);
    }
   
    public void setEntrada(){
        entrada=BigDecimal.valueOf(sc.nextDouble());
    }
   
    public BigDecimal getEntrada(){
        return entrada;
    }
}
Código: [Seleccionar]
package practicas.avanzadas;

import java.math.BigDecimal;

/**
 * principal para calculo de impuestos
 * @author pepote21
 * @version 20170129
 */
public class PrincipalE907_C {
    public static void main(String[] args){
        EntradaDeTecladoE907_C a=new EntradaDeTecladoE907_C();
        E907_C b=new E907_C();
       
        System.out.println("Por favor introduzca el importe inicial");
        a.setEntrada();
        BigDecimal impInicial=a.getEntrada();
        System.out.println("Por favor introduzca el porcentaje de impuestos");
        a.setEntrada();
        BigDecimal porcImpuestos=a.getEntrada();
   
        b.setPorcImpuestos(porcImpuestos);
       
        b.setImpuesto(impInicial,porcImpuestos);
        b.setImpFinal(impInicial,b.getImpuesto());
    }
}
« Última modificación: 23 de Marzo 2017, 21:45 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas Pepote21 comento algunas cuestiones sobre el ejercicio

Un nombre de clase como E907_C no es un nombre adecuado. Los nombres de clase deben definir qué hace la clase y permitir hacer una referencia a "he creado un objeto de tipo ...". He creado un objeto de tipo E0907_C no es adecuado.

Tienes algunos errores de concepto. Por ejemplo:

    public void setImpuesto(BigDecimal impInicial,BigDecimal porcImpuestos) {
        impuesto=impInicial.multiply(porcImpuestos).divide(BigDecimal.valueOf(100));
        impuesto=impuesto.setScale(2, RoundingMode.HALF_UP);
        System.out.println("El impuesto a pagar es: "+impuesto);
    }

No es un método bien definido desde el punto de vista de la programación orientada a objetos. Un método set se usa para establecer el valor del atributo de una clase. En este caso estás mezclando operaciones que no corresponden a un set con mostrar un mensaje por pantalla, etc.

Que el programa haga lo que se pretende no significa que esté bien diseñado.

Para hacer buenos diseños es recomendable repasar los conceptos y hacer los ejercicios del curso de Java básico: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Salu2

Pepote21

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 92
    • Ver Perfil
Hola Ogramar, encantado de saludarte.
Sobre el error del nombre de clase ya me lo comentaste el ejercicio anterior y lo tengo en cuenta. Aunque encontrarás algún otro ejercicio ya hecho con el mismo error. Como sabras son errores de organización de carpetas pero que rectificaré.
Con respecto al primer curso de java, empecé muy verde y sigo muy verde, pero sigo estudiante mucho como sabreis.
Volveré a java que es lo que más me interesa; no sabía continuar con más temario, pero ahora estoy en css.
Gracias, un saludo a todos.

 

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".