[ACCEPTED]-How do I set the floating point precision in Perl?-floating-accuracy

Accepted answer
Score: 22

Use Math::BigFloat or bignum:

use Math::BigFloat;
Math::BigFloat->precision(-3);

my $x = Math::BigFloat->new(1.123566);
my $y = Math::BigFloat->new(3.333333);

Or with bignum instead do:

use bignum ( p => -3 );
my $x = 1.123566;
my $y = 3.333333;

Then in both 1 cases:

say $x;       # => 1.124
say $y;       # => 3.333
say $x + $y;  # => 4.457
Score: 16

There is no way to globally change this.

If 5 it is just for display purposes then use 4 sprintf("%.3f", $value);.

For mathematical purposes, use (int(($value * 1000.0) + 0.5) / 1000.0). This 3 would work for positive numbers. You would 2 need to change it to work with negative 1 numbers though.

Score: 3

I wouldn't recommend to use sprintf("%.3f", $value).

Please 2 look at the following example: (6.02*1.25 1 = 7.525)

printf("%.2f", 6.02 * 1.25) = 7.52

printf("%.2f", 7.525) = 7.53

Score: 1

Treat the result as a string and use substr. Like 3 this:

$result = substr($result,0,3);

If you want to do rounding, do it as 2 string too. Just get the next character 1 and decide.

Score: 0

Or you could use the following to truncate 2 whatever comes after the third digit after 1 the decimal point:

if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
    $val = $1;  
}

More Related questions