Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

199
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!