Chris wrote: > > I am retrieving rows with a money datatype from a database. These are > written to a file with 2 decimal places. I also keep a running total. > My problem is the total does not equal to the sum of details. > > I have tried using > $amount = sprintf('%.2f', $amount); > $total += $amount; > > # do this after all tallying, just before writing to file > $total = sprintf('%.2f', $total); > > How do I tally money with perl?
Assuming that you are tallying dollars like $12,345.67, convert to cents (an integer) by removing all punctuation and convert back to dollars to print the final total. $ perl -le' @dollars = qw/ $12,345.67 $11,555.99 $9,765.35 $432 $876.4 /; for ( @dollars ) { # add zeros for proper format $_ .= ".00" unless tr/.//; $_ .= "0" unless /\.\d\d$/; # remove non-digits tr/0-9//cd; $total += $_; } ($total2 = $total) =~ s/(\d\d)$/.$1/; printf "%.2f\n", $total / 100; print $total2; ' 34975.41 34975.41 John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]