##
approx($num, 7); # will return 0.5 for 0.500000001 but 0.50000001 if
# that is passed as it only has 6 zeros.
##
##
sub approx {
my ( $num, $dp ) = @_;
$dp ||= 6;
if ( $num =~ m/\d*\.(\d*?)(9{$dp,})\d*/ ) {
my $exp = 10** (length $1 + length $2);
return int(($num * $exp) +1 )/$exp;
}
elsif ( $num =~ m/\d*\.(\d*?)(0{$dp,})\d*/ ) {
my $exp = 10** (length $1 + length $2);
return int($num * $exp)/$exp;
}
else {
return $num;
}
}