]> git.sesse.net Git - foosball/commitdiff
Centralize rounding decisions, so we round symmetrically.
authorSteinar H. Gunderson <sesse@debian.org>
Sun, 21 Oct 2007 11:40:52 +0000 (13:40 +0200)
committerSteinar H. Gunderson <sesse@debian.org>
Sun, 21 Oct 2007 11:40:52 +0000 (13:40 +0200)
foosball.pm
www/assess-double.pl
www/assess-single.pl
www/index.pl

index a2b0d55b041ab4d8f6084f523dc8d680a31c4ecc..9c3821834525e665d2b1fddeb6e13adbd18fb015 100644 (file)
@@ -1,6 +1,7 @@
 use strict;
 use warnings;
 use DBI;
+use POSIX;
 
 package foosball;
 
@@ -10,6 +11,12 @@ sub db_connect {
        return $dbh;
 }
 
+sub round {
+       my $x = shift;
+       return -round(-$x) if ($x < 0.0);
+       return POSIX::floor($x + 0.5);
+}
+
 sub find_single_rating {
        my ($dbh, $username, $limit) = @_;
        my ($age, $rating, $rd) = $dbh->selectrow_array('SELECT EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP-ratetime)), rating, rd FROM single_rating WHERE username=? '.$limit.' ORDER BY ratetime DESC LIMIT 1',
index 1b28fc57dda2218e7242601be1fc250fd1c16dc4..25c79687287739ed2e886ff55e9dfb6c076e8816 100755 (executable)
@@ -44,10 +44,10 @@ while (<ASSESS>) {
        push @results10, {
                score => $score,
                prob => (sprintf "%.3f", $prob),
-               rdiff1 => (sprintf "%+d", int($rdiff1+0.5)),
-               rdiff2 => (sprintf "%+d", int($rdiff2+0.5)),
-               rdiff3 => (sprintf "%+d", int($rdiff3+0.5)),
-               rdiff4 => (sprintf "%+d", int($rdiff4+0.5)),
+               rdiff1 => (sprintf "%+d", foosball::round($rdiff1)),
+               rdiff2 => (sprintf "%+d", foosball::round($rdiff2)),
+               rdiff3 => (sprintf "%+d", foosball::round($rdiff3)),
+               rdiff4 => (sprintf "%+d", foosball::round($rdiff4)),
        };
 }
 
@@ -61,10 +61,10 @@ while (<ASSESS>) {
        push @results7, {
                score => $score,
                prob => (sprintf "%.3f", $prob),
-               rdiff1 => (sprintf "%+d", int($rdiff1+0.5)),
-               rdiff2 => (sprintf "%+d", int($rdiff2+0.5)),
-               rdiff3 => (sprintf "%+d", int($rdiff3+0.3)),
-               rdiff4 => (sprintf "%+d", int($rdiff4+0.4)),
+               rdiff1 => (sprintf "%+d", foosball::round($rdiff1)),
+               rdiff2 => (sprintf "%+d", foosball::round($rdiff2)),
+               rdiff3 => (sprintf "%+d", foosball::round($rdiff3)),
+               rdiff4 => (sprintf "%+d", foosball::round($rdiff4)),
        };
 }
 
@@ -75,10 +75,10 @@ my $doc = XML::Template::process_file('assess-double.xml', {
        'username2' => $username1_2,
        'username3' => $username2_1,
        'username4' => $username2_2,
-       'rating1' => int($rating1_1+0.5),
-       'rating2' => int($rating1_2+0.5),
-       'rating3' => int($rating2_1+0.5),
-       'rating4' => int($rating2_2+0.5),
+       'rating1' => foosball::round($rating1_1),
+       'rating2' => foosball::round($rating1_2),
+       'rating3' => foosball::round($rating2_1),
+       'rating4' => foosball::round($rating2_2),
        '#results10' => XML::Template::alternate('tr/class', \@results10, 'odd', 'even'),
        '#results7' => XML::Template::alternate('tr/class', \@results7, 'odd', 'even'),
 });
index 4a7d5a0fe0456860846e29554f1b41dbc9f88021..1d5cf563544f1554a7b247f1cc2188a1fdbde2f6 100755 (executable)
@@ -34,8 +34,8 @@ while (<ASSESS>) {
        push @results10, {
                score => $score,
                prob => (sprintf "%.3f", $prob),
-               rdiff1 => (sprintf "%+d", int($rdiff1+0.5)),
-               rdiff2 => (sprintf "%+d", int($rdiff2+0.5)),
+               rdiff1 => (sprintf "%+d", foosball::round($rdiff1)),
+               rdiff2 => (sprintf "%+d", foosball::round($rdiff2)),
        };
 }
 
@@ -49,8 +49,8 @@ while (<ASSESS>) {
        push @results7, {
                score => $score,
                prob => (sprintf "%.3f", $prob),
-               rdiff1 => (sprintf "%+d", int($rdiff1+0.5)),
-               rdiff2 => (sprintf "%+d", int($rdiff2+0.5)),
+               rdiff1 => (sprintf "%+d", foosball::round($rdiff1)),
+               rdiff2 => (sprintf "%+d", foosball::round($rdiff2)),
        };
 }
 
@@ -59,8 +59,8 @@ print CGI->header(-type=>'application/xhtml+xml');
 my $doc = XML::Template::process_file('assess.xml', {
        'username1' => $username1,
        'username2' => $username2,
-       'rating1' => int($rating1+0.5),
-       'rating2' => int($rating2+0.5),
+       'rating1' => foosball::round($rating1),
+       'rating2' => foosball::round($rating2),
        '#results10' => XML::Template::alternate('tr/class', \@results10, 'odd', 'even'),
        '#results7' => XML::Template::alternate('tr/class', \@results7, 'odd', 'even'),
 });
index a9f2d43b7d022a7dd133f424b004dc3436afba1d..c1ab7d17a2993e2dab12c7a66cfcb31556c88645 100755 (executable)
@@ -21,14 +21,14 @@ while (my $ref = $q->fetchrow_hashref) {
 
        my $trend = "";
        if (defined($oldrating)) {
-               $trend = (sprintf "%+d", int($rating-$oldrating+0.5));
+               $trend = (sprintf "%+d", foosball::round($rating-$oldrating));
        }
 
        push @single_top, {
                'username' => $username,
-               'rating' => int($rating+0.5),
-               'rd' => int($rd+0.5),
-               'lowerbound' => int($rating - 3.0*$rd + 0.5),
+               'rating' => foosball::round($rating),
+               'rd' => foosball::round($rd),
+               'lowerbound' => foosball::round($rating - 3.0*$rd),
                'trend' => $trend,
        };
 }
@@ -47,14 +47,14 @@ while (my $ref = $q->fetchrow_hashref) {
 
        my $trend = "";
        if (defined($oldrating)) {
-               $trend = (sprintf "%+d", int($rating-$oldrating+0.5));
+               $trend = (sprintf "%+d", foosball::round($rating-$oldrating));
        }
 
        push @double_top, {
                'username' => $username,
-               'rating' => int($rating+0.5),
-               'rd' => int($rd+0.5),
-               'lowerbound' => int($rating - 3.0*$rd + 0.5),
+               'rating' => foosball::round($rating),
+               'rd' => foosball::round($rd),
+               'lowerbound' => foosball::round($rating - 3.0*$rd),
                'trend' => $trend,
        };
 }
@@ -117,14 +117,14 @@ $q->execute();
 while (my $ref = $q->fetchrow_hashref) {
        if (defined($ref->{'diff2'})) {
                $ref->{'diff1'} = sprintf "%+d / %+d",
-                       int($ref->{'diff1'} + 0.5),
-                       int($ref->{'diff2'} + 0.5);
+                       foosball::round($ref->{'diff1'}),
+                       foosball::round($ref->{'diff2'});
                $ref->{'diff2'} = sprintf "%+d / %+d",
-                       int($ref->{'diff3'} + 0.5),
-                       int($ref->{'diff4'} + 0.5);
+                       foosball::round($ref->{'diff3'}),
+                       foosball::round($ref->{'diff4'});
        } else {
-               $ref->{'diff1'} = sprintf "%+d", int($ref->{'diff1'} + 0.5);
-               $ref->{'diff2'} = sprintf "%+d", int($ref->{'diff3'} + 0.5);
+               $ref->{'diff1'} = sprintf "%+d", foosball::round($ref->{'diff1'});
+               $ref->{'diff2'} = sprintf "%+d", foosball::round($ref->{'diff3'});
        }
        push @last_games, $ref;
 }