@Override public Double calculateStudentWeightedAverage(StudentCurricularPlan studentCurricularPlan) { float marks = 0; float numberOfWeigths = 0; for (Enrolment enrolment : studentCurricularPlan.getEnrolmentsSet()) { if (enrolment.isEnrolmentStateApproved() && !enrolment .getCurricularCourse() .getType() .equals(CurricularCourseType.P_TYPE_COURSE)) { if (!enrolment.isExtraCurricular()) { final Grade grade = enrolment.getGrade(); if (grade.isNumeric()) { int enrolmentMark = Integer.valueOf(grade.getValue()); double enrolmentWeight = enrolment.getCurricularCourse().getCredits(); if (enrolmentMark > 0) { marks += (enrolmentMark * enrolmentWeight); numberOfWeigths += enrolmentWeight; } } else { // This mark will not count for the average } } } } if (marks == 0) { return new Double(0); } return NumberUtils.formatNumber(new Double(marks / numberOfWeigths), 1); }