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...