Laurent_R is correct, but you can get close(r) to what you want with a better rounding function. Consider:
#! perl use strict; use warnings; my @fractions = (3 / 11, 2 / 11, 1 / 11, 5 / 11); my @rounded_old = map { round_old($_) } @fractions; my @rounded_new = map { round_new($_) } @fractions; my $sum_old = 0; $sum_old += $_ for @rounded_old; my $sum_new = 0; $sum_new += $_ for @rounded_new; printf "\nOld sum: %.2f new sum: %.2f\n", $sum_old, $sum_new; sub round_old { return 100 * sprintf("%.2f", shift); } sub round_new { return sprintf("%.2f", int((1e5 * shift) + 0.5) / 1e3); }
Output:
22:10 >perl 688_SoPW.pl Old sum: 99.00 new sum: 99.99 22:10 >
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re: How to calculate the sum of columns to be equal to 100?
by Athanasius
in thread How to calculate the sum of columns to be equal to 100?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |