log contents:01:39.560: return part 1: 37401:39.560: return part 2: 24901:39.560: return in full: -182837965201:39.560: marv pct = -1610612736 and marv count = 107321964101:39.560: return part 1: 9601:39.560: return part 2: 24901:39.560: return in full: 25873297001:39.560: perf pct = 0 and perf count = 107116460101:39.560: return part 1: 2801:39.560: return part 2: 24901:39.560: return in full: -184562851701:39.560: great pct = -1610612736 and great count = 106933696201:39.560: return part 1: 001:39.560: return part 2: 24901:39.560: return in full: 001:39.560: good pct = 0 and good count = 001:39.560: return part 1: 001:39.560: return part 2: 24901:39.560: return in full: 001:39.560: boo pct = 0 and boo count = 001:39.560: return part 1: 001:39.560: return part 2: 24901:39.560: return in full: 001:39.561: miss pct = 0 and miss count = 0Then the code:float StageStats::GetTapPercentages( PlayerNumber pn, TapNoteScore tns ) const{ int iTotalTaps = 0; for( int i=TNS_MISS; i<NUM_TAP_NOTE_SCORES; i++ ) { iTotalTaps += iTapNoteScores[pn][i]; } LOG->Trace( "return part 1: %i", ( PREFSMAN->m_iGradeWeightMarvelous * iTapNoteScores[pn][tns] ) ); LOG->Trace( "return part 2: %i", iTotalTaps ); int iTaps = ( PREFSMAN->m_iGradeWeightMarvelous * iTapNoteScores[pn][tns] ); float fTapPercentage = (float)iTaps / (float)iTotalTaps; LOG->Trace( "return in full: %i", fTapPercentage ); return fTapPercentage;}