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"; }