sub round($$)
{
sprintf "%.$_[1]f",$_[0];
}
print round(8.7385, 2); # prints 8.74
####
for my $i (0 .. 10)
{
print round($i+0.555,2)," ";
}
# which prints:
# 0.56 1.56 2.56 3.56 4.55 5.55 6.55 7.55 8.55 9.55 10.56
####
for (my $i = 1; $i < \xFFFF; $i <<= 1)
{ print round($i+0.555,2), " "; }
# which prints:
#1.56 2.56 4.55 8.55 16.56 32.56 64.56 128.56 256.56 512.55
#1024.56 2048.55 4096.56 8192.56 16384.56 32768.56 65536.55
#131072.55 262144.55 524288.56 1048576.55 2097152.56 4194304.55
#8388608.55 16777216.56
#
#(You can try with different numbers and different precision as long
# as the last digit is '5' and the precision = number of digits - 1)
####
sub round2($$)
{
my $var=$_[0];
my $decimal=($var-int(var));
if ($decimal && ((length($decimal)-2)>$_[1]) && ($var=~/5$/))
{
$var=~s/5$/6/;
}
sprintf "%.$_[1]f",$var;
}
# some output:
for (my $i = 1; $i < \xFFFF; $i <<= 1)
{ print round($i+0.555,2), " ", round2($i+0.555,2), "\n"; }