From 1f8489da48b9721d9c44b97749078a94b935a7b2 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sun, 21 Oct 2007 13:40:52 +0200 Subject: [PATCH] Centralize rounding decisions, so we round symmetrically. --- foosball.pm | 7 +++++++ www/assess-double.pl | 24 ++++++++++++------------ www/assess-single.pl | 12 ++++++------ www/index.pl | 28 ++++++++++++++-------------- 4 files changed, 39 insertions(+), 32 deletions(-) diff --git a/foosball.pm b/foosball.pm index a2b0d55..9c38218 100644 --- a/foosball.pm +++ b/foosball.pm @@ -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', diff --git a/www/assess-double.pl b/www/assess-double.pl index 1b28fc5..25c7968 100755 --- a/www/assess-double.pl +++ b/www/assess-double.pl @@ -44,10 +44,10 @@ while () { 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 () { 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'), }); diff --git a/www/assess-single.pl b/www/assess-single.pl index 4a7d5a0..1d5cf56 100755 --- a/www/assess-single.pl +++ b/www/assess-single.pl @@ -34,8 +34,8 @@ while () { 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 () { 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'), }); diff --git a/www/index.pl b/www/index.pl index a9f2d43..c1ab7d1 100755 --- a/www/index.pl +++ b/www/index.pl @@ -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; } -- 2.39.2