--- loncom/homework/grades.pm 2006/02/14 15:11:09 1.313
+++ loncom/homework/grades.pm 2006/02/26 00:30:17 1.316
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.313 2006/02/14 15:11:09 banghart Exp $
+# $Id: grades.pm,v 1.316 2006/02/26 00:30:17 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -40,6 +40,7 @@ use Apache::lonmsg qw(:user_normal_msg);
use Apache::Constants qw(:common);
use Apache::lonlocal;
use String::Similarity;
+use POSIX qw(floor);
my %oldessays=();
my %perm=();
@@ -467,6 +468,33 @@ sub jscriptNform {
return $jscript;
}
+# Given the score (as a number [0-1] and the weight) what is the final
+# point value? This function will round to the nearest tenth, third,
+# or quarter if one of those is within the tolerance of .00001.
+sub compute_points {
+ my ($score, $weight) = @_;
+
+ my $tolerance = .00001;
+ my $points = $score * $weight;
+
+ # Check for nearness to 1/x.
+ my $check_for_nearness = sub {
+ my ($factor) = @_;
+ my $num = ($points * $factor) + $tolerance;
+ my $floored_num = floor($num);
+ if ($num - $floored_num < 2 * $tolerance * $factor) {
+ return $floored_num / $factor;
+ }
+ return $points;
+ };
+
+ $points = $check_for_nearness->(10);
+ $points = $check_for_nearness->(3);
+ $points = $check_for_nearness->(4);
+
+ return $points;
+}
+
#------------------ End of general use routines --------------------
#
@@ -1812,7 +1840,7 @@ KEYWORDS
foreach my $file (@$files) {
$file_counter ++;
&Apache::lonnet::allowuploaded('/adm/grades',$file);
- $lastsubonly.='
'.$file.'';
+ $lastsubonly.='
'.$file.'';
}
$lastsubonly.='
';
}