Soy un principiante en javascript. Me resulta un poco difícil seguir un fragmento de código. Creo que ambos son iguales y deberían haber dado el mismo resultado. Pero están arrojando resultados diferentes.
var a = 5, b = 6, c = 7; if (a + b > c || b + c > a || a + c > b) { let s = (a + b + c) / 2; let area = Math.sqrt(s * ((s - a) * (s - b) * (s - c))); console.log(`The area of the triangle is: ${area}`); } else { console.log('Triangle does not exist'); }Me da resultado. Pero cuando trato de tomar información del usuario e ingresar el mismo valor (5,6,7), encuentro un resultado diferente.
var a = prompt(), b = prompt(), c = prompt(); if (a + b > c || b + c > a || a + c > b) { let s = (a + b + c) / 2; let area = Math.sqrt(s * ((s - a) * (s - b) * (s - c))); console.log(`The area of the triangle is: ${area}`); } else { console.log('Triangle does not exist'); }Tal vez yo estoy equivocado. Pero solo quiero saber la razón.
Gracias.
Mi suposición es que esto está relacionado con prompt() que devuelve una cadena y no un número entero. Por lo tanto, las sumas de las variables a , b y c concatenarían las cadenas y solo después de eso, causadas por la comparación > y después de la división / , se convertiría en un número. Entonces, para solucionar esto, creo que usar parseInt() para analizar los números devueltos desde prompt() solucionaría el problema
El mensaje hace que las variables se definan como una cadena y, como señaló @Barmar en su comentario, esto cambia el comportamiento de la operación '+' en su declaración if.
Con números 1 +1 se devuelve como 2, con cadenas 11. Lo que puedes hacer es cambiar lo siguiente: let s = (a + b + c) / 2; te dará 567/2 ya que tienes cuerdas. let s = (parseInt(a) + parseInt(b) + parseInt(c) ) / 2; le dará el resultado deseado ya que el método parseInt() devuelve un valor entero.