in reply to Math::round not rounding correctly

15/100 is a periodic number in binary, so it can't be stored accurately as a float.
____ 1.15 base10 = 1.001001 base2

This error causes 3010*1.15 to be equal to 3461.4999999999995, which Math::Round is correctly rounding to 3461.

You need to incorporate a tolerance. Since 1/2 can be stored precisely in a floating point number (0.510 = 0.12), you can use the following:

use feature qw( say ); use Math::Round qw( round ); my $x = 3010*1.15; say round($x); say round(round($x * 10**5) / 10**5); # 5 decimal places of precision
3461 3462

This is basically what tye did by stringifying the number, except he let Perl "choose" the factor.