public StudentFinalGrade(StudentGrade lectureGrade, StudentGrade exerciseGrade, StudentGrade workshopGrade)
        {
            var rawFinalGrade = CalculateRawFinalGrade(lectureGrade, exerciseGrade, workshopGrade);

            Value     = RoundToNearestHalf(rawFinalGrade);
            HasPassed = Value >= 3;
        }
 private static StudentGrade CalculateRawFinalGrade(StudentGrade lectureGrade, StudentGrade exerciseGrade, StudentGrade workshopGrade)
 => new StudentGrade(
     LectureWeight * lectureGrade.Value
     + ExerciseWeight * exerciseGrade.Value
     + WorkshopWeight * workshopGrade.Value
     );
 private static double RoundToNearestHalf(StudentGrade rawFinalGrade) => Math.Round(rawFinalGrade.Value * 2, MidpointRounding.AwayFromZero) / 2;