http://qs1969.pair.com?node_id=689243


in reply to decimal precision

and than deal with that number when calculating the next number in the iteration (last number in the list)

This suggests to me that you actually want to use the rounded number in the next line of your iteration. Is this intentional?

A method that doesn't rely on interpreting the number in string context is as follows:

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 th +at 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;
prints:
0.00141 0.0000019881 0.0000000028032 0.0000000000039525 0.000000000000005573 0.0000000000000000078579 0.000000000000000000011079 0.000000000000000000000015621 0.000000000000000000000000022025 0.000000000000000000000000000031055 0.000000000000000000000000000000043787

This obviously introduces rounding errors. is that what you want or have I mis-interpreted the question?

........
Those are my principles. If you don't like them I have others.
-- Groucho Marx
.......