From: Robin Becker on
On 12/07/2010 19:59, Mark Dickinson wrote:
.............
>> It does look inconsistent however, and it seems to me rounding and
>> interpolation should behave similarly.
>
> Agreed. In this case it's a minor bug that round(-9.85, 1)
> produces -9.9 instead of -9.8; both string formatting
> and round should give -9.8. This bug is fixed in Python
> 2.7 and in Python 3.x.
>
> Note that in 2.7 there's still a legitimate difference: round
> rounds halfway cases away from 0, while string formatting
> rounds them to even. So the following results are correct:
>
> Python 2.7 (r27:82500, Jul 11 2010, 22:38:53)
> [GCC 4.2.1 (Apple Inc. build 5659)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
>>>> round(1.25, 1)
> 1.3
>>>> '%.1f' % 1.25
> '1.2'
>
> (1.25 *is* an exact halfway case, since it's exactly
> representable as a binary float.)
>
> In Python 3.x, round always does round-half-to-even, so
> string formatting and round should agree (and if they don't,
> it's definitely a bug: please report it!)
>
> With all this said, asking for *decimal* rounding of
> *binary* approximations to *decimal* halfway cases to give
> the results you expect is ... optimistic, to say the least.
> Use the decimal module if you care about which way
> your (almost) halfway cases get rounded.
>
> [I already replied to this earlier through Google groups, but
> I'm not sure whether it went through properly. Apologies
> for the duplication, if so.]
>

yes thanks I saw that, but no problem about the dup. I suspect we might end up
using some kind of fixed point.

Anyhow does anyone have a good algorithm for ensuring rounded percentages do add
up to 100%? :) How about grouped percentages ie ensure the group sums and the
groups display correctly in rounded form.
--
Robin Becker

From: Emile van Sebille on
On 7/13/2010 9:06 AM Robin Becker said...
>
> Anyhow does anyone have a good algorithm for ensuring rounded
> percentages do add up to 100%? :) How about grouped percentages ie
> ensure the group sums and the groups display correctly in rounded form.

I generally do the calculations in memory then set the
largest to 100 - sum(rounded(others)). (Same as for
double entry bookkeeping to ensure debits == credits)

Emile