sub ceil_2dp($) { my $num=shift()*1e2; # x 100 return int($num) == $num # It had exactly 2dp. ? $num/1e2 # return it as it was : $num < 0 # less than zero ? int(--$num)/1e2 # -1 int and div : int(++$num)/1e2; # else +1 and div } for (1.2818, 1.1213, 234.33, 32.1323, 55.6274, -1.2818, -1.1213, -234.33, -32.1323, -55.6274) { print ceil_2dp( $_ ) . $/; } __END__ 1.29 1.13 234.33 32.14 55.63 -1.29 -1.13 -234.33 -32.14 -55.63