Weed was right sprintf does round the number so it is unusable by itself. However the method proposed by Dia: NL will also not work because if the last digit is a zero it will be truncated on display. Here is what I came up with.
<?php
$money = array(123.123,123.234,123.345,123.456,123.567,123.678,123.789,123.890,123.901);
foreach ($money as $amount) {
$temp = sprintf("%01.2f",(floor($amount*100)/100));
echo $amount . ' = ' . $temp . '<br />';
} //end foreach
?>
Which yields this output
123.123 = 123.12
123.234 = 123.23
123.345 = 123.34
123.456 = 123.45
123.567 = 123.56
123.678 = 123.67
123.789 = 123.78
123.89 = 123.89
123.901 = 123.90
Notice that the 0 is truncated on 123.890 befor the item is printed so it appears the code is doing nothing. However it is, because the code actually removed the 0 from existence instead of just not displaying it. A word of warning though, do not round your money amounts until the last possible second before printing. All calculations should be done on the exact values to limit rounding errors.
Edit: You could also subtract .005 from money and then round it, like so
<?php
$temp = sprintf("%01.2f",(round(($amount-.005),2)));
?>
Which is more efficient then the above code as it does not multiply then divide which are both very expensive operations. For most applications the performance difference will be negligable but it is noted here for completeness.