Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

204
Visualizações
¿Cómo se evita que NaN sea el valor de retorno de varios cálculos de valores numéricos?

Soy nuevo en Javascript y estoy tratando de hacer un cálculo que cambia según el número que se escribe en la entrada. Sin embargo, las funciones convierten la salida en un NaN, por lo que me pregunto si puedo transformar el NaN en un número normal (para poder agregar hUeCalc y massCalc y mostrarlo como un número) para usar o si tengo que usar otra opción para hacer los cálculos.

Tal vez el cambio y el caso podrían ser una opción, pero no estoy muy seguro de si tendrían el efecto que necesito.

En el Código a continuación, puede ver la función que se ejecuta cuando se presiona un botón. En este momento, cuando hago clic en el botón que activa la función calc, obtengo NaN en tax.innerHTML en lugar de un número.

Gracias por adelantado.

 function calc() { let hubraum = Number(hubraumComponent.value); let emission = Number(emissionComponent.value); let masse = Number(masseComponent.value); let hUeCalc = Number(function (){ if (Diesel.checked == true) { ((Math.ceil((hubraum/100)))*9.5)+((emission-95)*2); } else if (Benzin.checked == true) { ((Math.ceil((hubraum/100)))*2)+((emission-95)*2); }; }); let masseCalc = Number(function (){ let masseValue; if (masse <= 2000) { masseValue = (Math.ceil((masse/200)*5.625)); } else if (masse >= 3000) { masseValue =(Math.ceil((masse/200)*6.01)); } else if (masse >= 3500) { masseValue = (Math.ceil(masse/200)*6.39); }; }); // let masseValue = (Math.ceil (masse/200)); let berechnung = (hUeCalc + masseCalc); tax.innerHTML = (berechnung) + "€"; console.log('Calc has been done'); console.log('hubraum value is ' + hubraum); console.log('emission value is ' + emission); console.log('masse value is ' + masse); console.log('hubraumcalc value is ' + hUeCalc); console.log('massecalc value is ' + masseCalc); }

También aquí está el HTML en caso de que quieras ver el botón que activa todo esto

 <div class="input-field-second-calc" onclick="calc()"> <input type="button" class="btn btn-outline-primary" value="berechnen"> <br> <a id="tax"></a> </div>
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

¡Necesita devolver un valor en sus dos funciones!

Cuando tu lo hagas :

 let hUeCalc = Number(function (){ if (Diesel.checked == true) { ((Math.ceil((hubraum/100)))*9.5)+((emission-95)*2); } else if (Benzin.checked == true) { ((Math.ceil((hubraum/100)))*2)+((emission-95)*2); }; })

Básicamente, está diciendo que convierta el valor de retorno de la función en un número y asígnelo a hUeCalc . Pero como la función no devuelve nada. Está tratando de convertir indefinido en un número. que dan NaN como resultado.

Lo mismo va para :

 let masseCalc = Number(function (){ let masseValue; if (masse <= 2000) { masseValue = (Math.ceil((masse/200)*5.625)); } else if (masse >= 3000) { masseValue =(Math.ceil((masse/200)*6.01)); } else if (masse >= 3500) { masseValue = (Math.ceil(masse/200)*6.39); }; });

Por cierto, con:

 if (masse <= 2000) { masseValue = (Math.ceil((masse/200)*5.625)); } else if (masse >= 3000) { masseValue =(Math.ceil((masse/200)*6.01)); } else if (masse >= 3500) { masseValue = (Math.ceil(masse/200)*6.39); };

Nunca llegarás a lo último else if lo intentamos con 3700, por ejemplo. No coincidirá con el primero si pero con el segundo ya que 3700 es mayor que 3000. Debe invertir el orden de los dos si.

Y también debe agregar otra cosa para el número entre 2000 y 3000 (si es un valor aceptado)

about 4 years ago · Juan Pablo Isaza Relatório

0

Una refactorización de código debe separar ambos cálculos actuales, cada uno en una parte que proporciona/implementa una única función de cálculo especializada y una parte que invoca el cálculo con los valores correctos, incluidos los valores alternativos válidos en caso de que no se puedan cumplir algunas condiciones.

Además sugiero arreglar el naming. No mezcles los idiomas. Omita la parte alemana ya que la mayor parte del código (incluido el registro) se nombra y comenta en inglés.

 function getCalculatedHUeValue(displacement, emission, fuelFactor) { return (Math.ceil(displacement / 100) * fuelFactor) + ((emission - 95) * 2); } function getCalculatedMassValue(mass, massFactor) { return Math.ceil(mass / 200 * massFactor); } function calc() { const displacement = Number(displacementComponent.value); const emission = Number(emissionComponent.value); const mass = Number(massComponent.value); const hUeCalc = getCalculatedHUeValue(displacement, emission, (Diesel.checked && 9.5) || (Benzin.checked && 2) || 0 // default/fallback value needs to be provided/known. ); const massCalc = getCalculatedMassValue(mass, ((mass <= 2000) && 5.625) || ((mass >= 3500) && 6.39) || ((mass >= 3000) && 6.01) || // what is the factor for the uncovered // mass range in between 2001 and 2999? 0 // this fallback value has to be provided/known. ); const result = (hUeCalc + massCalc); tax.innerHTML = (result + "€"); console.log('Calculation is done'); console.log('displacement value is ' + displacement); console.log('emission value is ' + emission); console.log('mass value is ' + mass); console.log('hUeCalc value is ' + hUeCalc); console.log('massCalc value is ' + massCalc); }
about 4 years ago · Juan Pablo Isaza Relatório

0

Si prueba el siguiente código, creo que debería funcionar. Como puede ver, si desea utilizar una función para asignar un valor, la función tiene que devolver algo, si no es así, no hay valor para asignar. También debe asegurarse de que la función se ejecute, si no lo hace, let hUeCalc = function(){} simplemente se convierte en el identificador de la función.

 function calc() { let hubraum = Number(hubraumComponent.value); let emission = Number(emissionComponent.value); let masse = Number(masseComponent.value); let hUeCalc = Number(function (){ if (Diesel.checked == true) { return ((Math.ceil((hubraum/100)))*9.5)+((emission-95)*2); } else if (Benzin.checked == true) { return ((Math.ceil((hubraum/100)))*2)+((emission-95)*2); }; }()); let masseCalc = Number(function (){ let masseValue; if (masse <= 2000) { return masseValue = (Math.ceil((masse/200)*5.625)); } else if (masse >= 3000) { return masseValue =(Math.ceil((masse/200)*6.01)); } else if (masse >= 3500) { return masseValue = (Math.ceil(masse/200)*6.39); }; }()); // using () right after the function makes it so it get excecuted immediately // let masseValue = (Math.ceil (masse/200)); let berechnung = (hUeCalc + masseCalc); tax.innerHTML = (berechnung) + "€"; console.log('Calc has been done'); console.log('hubraum value is ' + hubraum); console.log('emission value is ' + emission); console.log('masse value is ' + masse); console.log('hubraumcalc value is ' + hUeCalc); console.log('massecalc value is ' + masseCalc); }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda