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

Score: 22
``````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