无法将字符串转换为浮点-非数字(NaN)

时间:2019-05-21 03:44:10

标签: angular nan

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

2 个答案:

答案 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);
}

}