I need to convert string to float to summarize all numbers and get the average.
I have tried Number(), parseFloat none of them are giving me the expected output.
例如,不是返回2,而是返回“ 11”
我正在从以下API中收集数据:https://www.hatchways.io/api/assessment/students obs(为了检索数据,我创建了一个服务: 导出类StudentsService {
studentsUrl:字符串=“ https://www.hatchways.io/api/assessment/students”;
构造函数(私有http:HttpClient){}
//可观察到学生数组
getAllStudents():可观察<{学生:学生[]}> {
//返回this.http.get(this.studentsUrl);
返回this.http.get <{students:Students []}>(${this.studentsUrl}
);
}
}
getAVG() {
for(let i = 0; i < this.students.length; i++) {
//console.log('Estudante número: '+ i);
for(let z = 0; z < 8; z++) {
//console.log('Notas index: ' + z);
this.grades[i] += Number(this.students[i].grades[z]);
console.log('nota: '+ this.students[i].grades[z]);
}
var num = parseFloat(this.grades[0]);
console.log('#######sum das notas######: ' + num);
}
}
I need to sum all grades in the array to calculate the average and display it
答案 0 :(得分:0)
使用parseFloat()
是正确的选择(在这种情况下parseInt()
也可以使用),只是正确使用它的问题。
本质上,您想遍历grade
数组的每个student.grades
,并将其值加到一个总和上,然后将其除以分数的数量。
类似这样的东西
this.students.forEach(student =>
{
let sum = 0;
student.grades.forEach(grade=>sum+=parseFloat(grade)) //Goes through each grade, parses it as float and add it's result to sum
let avg = sum/student.grades.length;
})
注意 :我正在使用forEach遍历数组,但也可以使用常规的for循环。这只是一个喜好问题
还有其他几种方法来求和/求平均值(array.reduce是其中之一),但是只要您解析字符串,就可以了。
Here's a working Stackblitz您的情况进行说明。
如果您有任何问题让我知道
答案 1 :(得分:0)
您必须先初始化this.grades[i]=0;
,然后再开始第二个循环(一个为'z)。
for(let i = 0; i < this.students.length; i++) {
//console.log('Estudante número: '+ i);
this.grades[i]=0;
for(let z = 0; z < 8; z++) {
//console.log('Notas index: ' + z);
this.grades[i] += Number(this.students[i].grades[z]);
console.log('nota: '+ this.students[i].grades[z]);
}
var num = parseFloat(this.grades[0]);
console.log('#######sum das notas######: ' + num);
}
}