 Just another Perl shrine PerlMonks

### Re: decimal precision

by why_bird (Pilgrim)
 on May 30, 2008 at 15:08 UTC ( #689243=note: print w/replies, xml ) Need Help??

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=\$_;
my \$no_d_p=\$_;  #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=\$_;
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
.......

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://689243]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (5)
As of 2023-05-31 17:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?