Reputation: 2924
Hey guys i have this weird issue with a javascript array that i want to calculate the sum and average of it.
So i have a prompt with an input and i'm asking the users to enter some numbers.
var sums = false;
var numbersArray = [];
function calculateAverage() {
while (sums == false) {
var numbers = prompt("Enter Integers.", "");
if (numbers != null) {
console.log(numbers);
numbersArray.push(numbers);
} else {
var sum = 0;
console.log(numbersArray);
for (var i = 0; i < numbersArray.length; i++) {
sum += numbersArray[i];
}
var avg = sum / numbersArray.length;
console.log(avg);
sums = true;
}
}
}
calculateAverage();
So from console logs i get the following prints
4
5
1
["4", "5", "1"]
150.33333333333334
How can this be possible?
Ok my bad! Gonna accept the first answer though cause you are all correct !
Upvotes: 1
Views: 258
Reputation: 47
I see that you've found a solution already, but I've been using an easier package called Shortcuts. You can use const short = require('@testgrandma/shortcuts');
to install it and then for this script you can do
short.arrayave([array]);
It'll return you the average of the array.
https://www.npmjs.com/package/@testgrandma/shortcuts
Upvotes: 0
Reputation: 3319
Just do parseInt before adding
var sums = false;
var numbersArray = [];
function calculateAverage() {
while (sums == false) {
var numbers = prompt("Enter Integers.", "");
if (numbers != null) {
console.log(numbers);
numbersArray.push(numbers);
} else {
var sum = 0;
console.log(numbersArray);
for (var i = 0; i < numbersArray.length; i++) {
sum += parseInt(numbersArray[i]);
}
var avg = sum / numbersArray.length;
console.log(avg);
sums = true;
}
}
}
calculateAverage();
Upvotes: 3
Reputation: 19007
How can this be possible?
Right now you are dealing with array of strings
hence the behavior.
Convert the string into numeric values and this should be fixed. To change string to numeric use parseInt()
numbersArray.push(parseInt(numbers,10));
Upvotes: 2
Reputation: 7117
Need to use ParseInt()
var sums = false;
var numbersArray = [];
calculateAverage();
function calculateAverage() {
while (sums == false) {
var numbers = prompt("Enter Integers.", "");
if (numbers != null) {
console.log(numbers);
numbersArray.push(numbers);
} else {
var sum = 0;
console.log(numbersArray, numbersArray.length);
for (var i = 0; i < numbersArray.length; i++) {
sum += parseInt(numbersArray[i]);
}
console.log(sum);
var avg = sum / numbersArray.length;
console.log(avg);
sums = true;
}
}
}
Upvotes: 2
Reputation: 926
You need to add parseInt to sum the integers otherwise 4,5,1 will joined to form 451 and average 451/3 = 150.33333
var sums = false;
var numbersArray = [];
function calculateAverage() {
while (sums == false) {
var numbers = prompt("Enter Integers.", "");
if (numbers != null) {
console.log(numbers);
numbersArray.push(numbers);
} else {
var sum = 0;
console.log(numbersArray);
for (var i = 0; i < numbersArray.length; i++) {
sum += parseInt(numbersArray[i]);
}
var avg = sum / numbersArray.length;
console.log(avg);
sums = true;
}
}
}
window.onload = calculateAverage();
Upvotes: 2
Reputation: 20006
Use parseFloat
or parseInt
method to convert string to nuber before adding. Please find the attached code.
<!DOCTYPE html>
<html>
<script>
var sums = false;
var numbersArray = [];
function calculateAverage() {
while (sums == false) {
var numbers = prompt("Enter Integers.", "");
if (numbers != null) {
console.log(numbers);
numbersArray.push(numbers);
} else {
var sum = 0;
console.log(numbersArray);
for (var i = 0; i < numbersArray.length; i++) {
sum += parseFloat(numbersArray[i]);
}
var avg = sum / numbersArray.length;
console.log(avg);
sums = true;
}
}
}
calculateAverage();
</script>
<body>
</body>
</html>
Upvotes: 2
Reputation: 5272
convert the user entered variable to integer before push into array
numbersArray.push(+ numbers);
Upvotes: 2
Reputation: 3925
sum += numbersArray[i];
It should be
sum += parseInt(numbersArray[i]);
Because without it you add another char to your string.
Upvotes: 2
Reputation: 9794
Convert string to integer before pushing into the Array
Use parsInt
numbersArray.push(parseInt(numbers));
var sums = false;
var numbersArray = [];
function calculateAverage() {
while (sums == false) {
var numbers = prompt("Enter Integers.", "");
if (numbers != null) {
console.log(numbers);
numbersArray.push(parseInt(numbers));
} else {
var sum = 0;
console.log(numbersArray);
for (var i = 0; i < numbersArray.length; i++) {
sum += numbersArray[i];
}
var avg = sum / numbersArray.length;
console.log(avg);
sums = true;
}
}
}
calculateAverage();
Upvotes: 3