I've run across the same sort of thing, adding and subtracting monetary amounts like that. The best way of dealing with I found was to let Perl handle the internal math however it wanted (if it wants to make something $6391.94999999999 who am I to argue?) and control the output using sprintf. This lets Perl determine precision for calculation while you have total control over precision of display. And all it right in the world...
Gary Blackburn
Trained Killer