Agreed, there's something else going on there, try isolating that in a small script all by itself, it will result in 3.3.
the savings are 3.30
// presuming you have 3.3,
echo sprintf("%.2f",$savings);
// --> 3.30
Only use sprintf on printouts, not in calculations.
Slightly OT, because this is not the problem, or shouldn't be: floating point issues are largely O.S. dependent, and you will get some odd results in some cases having to do with floating point precision. One way to get around it with some degree of accuracy:
$price = 12.95;
$quan = 4;
$tot = sprintf("%.2f",intval($quan * $price * 100)/100);
echo $tot;
I've found this pops up much more in Javascript than in any other language, due to much of it being input from text fields which are strings.