use strict;
use warnings;
use DBI;
+use POSIX;
package foosball;
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',
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)),
};
}
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)),
};
}
'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'),
});
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)),
};
}
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)),
};
}
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'),
});
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,
};
}
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,
};
}
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;
}