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