What is probably happening is that as a float, 20.875 is being represented as "20.8749999999...", which, when rounded to 2 decimal places, is being represented as 20.87. (Though, theorhetically, 0.875 should be able to be represented exactly by decimal fractions, but there's still some floating point math).
A general way to round to some place can be done by the following:
my $rounded = int ( $value / ( 10**$round ) + 0.5 ) * ( 10**$round );
where $round is the digit that you want to round to, 0 being the 1's place, 1 the tens, and -1 the tenths place. (and so forth). You'll want to do something with $round = -2 in your case here.
-----------------------------------------------------
Dr. Michael K. Neylon - mneylon-pm@masemware.com
||
"You've left the lens cap of your mind on again, Pinky" - The Brain
"I can see my house from here!"
It's not what you know, but knowing how to find it if you don't know that's important