Autor Tema: JavaScript problema precisión decimal multiplicar resultado no exacto CU01122E  (Leído 2007 veces)

cristiannd

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Acá les traigo el ejercicio CU01122E del curso de JavaScript en pdf con ejercicios resueltos. En este caso son dos ejercicios. En el primero opté por usar switch, pero probablemente también lo podría haber hecho con if else. No se cual de las dos opciones sería la más correcta para este caso, pero opté por usar switch para practicar.
También utilicé los valores del impuesto (21%, 10% y 5%) en número enteros porque si multiplicaba directamente la variable por (1.21 , 1.10 y 1.05) el resultado de 100 * 1.10 me daba 110.000000001.

Luego, si no colocaba la propiedad Number cuando ingresaba el número del tipo de producto, el precio con impuesto me daba undefined.

Acepto críticas constructivas porque creo que el código se puede mejorar.

Citar
1. Crea un script donde declares una función obtenerImporteConImpuestos que reciba dos parámetros: el importe sin impuestos (numérico) y el tipo de producto (numérico entero). La función debe mostrar por pantalla el importe sin impuestos más el 21% si el tipo de producto es 1, ó el importe sin impuestos más el 10% si el tipo de producto es 2, ó el importe sin impuestos más el 5% si el tipo de producto es 3.

Ejemplo: obtenerImporteConImpuestos(100, 1) debe mostrar: Para un importe sin impuestos de 100 y tipo de producto 1 el resultado de importe con impuestos es 121. obtenerImporteConImpuestos(100, 2) debe mostrar: Para un importe sin impuestos de 100 y tipo de producto 2 el resultado de importe con impuestos es 110.

2. Crea un script donde declares una función obtenerImporteConImpuestos2 que reciba un parámetro: el importe sin impuestos (numérico). La función debe devolver un array con valor undefined para el índice 0, el importe sin impuestos más el 21% para el índice 1, el importe sin impuestos más el 10% para el índice 2, ó el importe sin impuestos más el 5% para el índice 3. Invoca la función haciendo que se muestre el contenido del array por pantalla.

obtenerImporteConImpuestos(100) debe devolver: resultado[0] = undefined, resultado[1] = 121, resultado[2] = 110, resultado[3] = 105. Por pantalla se debe mostrar: Para precio sin impuestos 100 si el producto es tipo 1 el importe es 121, si el producto es tipo 2 el importe es 110 y si el producto es tipo 3 el importe es 105.

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Ejercicio CU01122E</title>
    <script>
        function obtenerImporteConImpuestos(importeSinImpuesto, tipoDeProducto){
            var importeConImpuesto;
            switch (tipoDeProducto) {
                case 1: importeConImpuesto = (importeSinImpuesto * 121)/100; break;
                case 2: importeConImpuesto = (importeSinImpuesto * 110)/100; break;
                case 3: importeConImpuesto = (importeSinImpuesto * 105)/100; break;
                default: importeConImpuesto = 'El tipo de producto no existe'; break;
            }
            document.write('El importe sin impuesto es: ' + importeSinImpuesto + ' y con el impuesto es: ' + importeConImpuesto);
        }

        function obtenerImporteConImpuesto2(importeSinImpuesto){
            var importeConImpuesto = [undefined];
            importeConImpuesto[1] = (importeSinImpuesto * 121)/100;
            importeConImpuesto[2] = (importeSinImpuesto * 110)/100;
            importeConImpuesto[3] = (importeSinImpuesto * 105)/100;

            document.write('El importe con los tres impuesto es: ' + importeConImpuesto);
        }
    </script>
</head>
<body>
    <script>
        obtenerImporteConImpuestos(Number(prompt('Ingrese el importe')), Number(prompt('Ingrese el tipo de producto' + '\n' + 'Productos: 1, 2 o 3')));
        document.write('<br>');
        obtenerImporteConImpuesto2(Number(prompt('Ingrese segundo importe')));
    </script>
</body>
</html>
« Última modificación: 18 de Septiembre 2020, 19:26 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, para quien revise este ejercicio, lo veo bien resuelto. Es tan válido resolverlo usando switch como resolverlo usando if.

Como bien se comenta, es frecuente que aparezcan problemas de precisión decimal en operaciones numéricas con JavaScript. Una forma de evitarlas es operar con enteros y posponer el uso de decimales al momento final, lo cual veo que en este ejercicio está bien hecho.

Una cosa en la que el ejercicio no se ajusta a los ejemplos y forma de trabajar del curso es en que usa document.write, que no es lo habitual en los ejemplos del curso. Tampoco es habitual lanzar el script sin antes pedir que se pulse sobre un botón o texto.

Salu2

 

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