use warnings; use strict; use bignum; sub trim { my $number=$_[0]; my $no_d_p=$_[1]; #number of decimal places die "$number is not a number" unless &isNumber($number); #check that you've got the right input die "$no_d_p is not an integer" unless int($no_d_p)==$no_d_p; my $power=0; for($power=0;$number<=(10**($no_d_p-1));$power++){ $number*=10; } $number=int($number); $number/=(10**$power); return($number); } sub isNumber { my $number=$_[0]; if ($number !~ /^\-?\d+(?:\.\d+)?(?:[Ee][+-]?\d{1,3})?$/){ return 0; } else { return 1; } } my $e = 0.00141; my $o =1; for(my $r=0; $r<=10; $r++){ $o *=$e; $o=&trim($o,5); print "$o\n"; } exit 0;