0

I am a beginner at javascript. I find following piece of code a bit difficult for me. I think both are same, and should have give the same result. But they are throwing different result.

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');
}

It gives me a result. But when i try to take input from user and input the same value (5,6,7), find different result.

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');
}

Maybe I am wrong. But I just want know the reason.

Thanks.

Barmar
  • 741,623
  • 53
  • 500
  • 612

2 Answers2

2

My assumption is that this is related to prompt() returning a string and not an integer. Therefore the additions of the variables a, b and c would concatenate the strings and only after that - caused by the comparison > and after division / - convert it to a number. So in order to fix this, I think using parseInt() to parse the numbers returned from prompt() would fix the issue

1

The promt causes the variables to be defined as a string and as @Barmar pointed out in his comment, this changes the behavior of the '+' operation in your if-statement.

With numbers 1 +1 is returned as 2, with strings 11. What you can do is change the following: let s = (a + b + c) / 2;will give you 567/2 as you have strings. let s = (parseInt(a) + parseInt(b) + parseInt(c) ) / 2; will give you the desired result as the method parseInt() returns a intger value.

A-Tech
  • 806
  • 6
  • 22