You're looking at the same problem that all programming languages have when they work with floating point numbers. 4.685 gets stored as something like 4.6849999999999996. Which rounded down to two decimal places is 4.68. It's the tradeoff you have to live with between accuracy and greater range.
Integer arithmetic is more reliable. Use it when you can (plus it's faster).
$actual_value=4.685;
echo round($actual_value*100)/100;
Of course, that is still a floating-point number, hence probably inaccurate (in fact, round(4.685*100) is 468, but 468/100 is 4.6799999999999997).