in reply to Rounding With sprintf anomaly?

It's not an anomaly.

Perl rounds scientifically. This is not the same way of rounding as accountants use. Accountants always round .5 up. That's probably what you were taught at school. It's predictable and good.

Scientists don't always round .5 up. .5 is exactly half way between two numbers. If they always rounded up, you would get statistical bias in large collections of rounded data. .5 is rounded sometimes up and sometimes down. (I think the rule is something like even numbers (2.5, 4.5, 6.5 etc.) round down while odd numbers (1.5, 3.5 etc.) round up.) This method is scientifically correct, and good.

Of course, there are also problems with INTs and FLOATs. For accounting correctness, one thing you can do is cheat:

# untested if ($unrounded =~ /\.(\d)/ and $1 > 4) {$rounded = int ($unrounded + 1 +)} else {$rounded = int $unrounded}
dave hj~

Replies are listed 'Best First'.
Re: Re: Rounding With sprintf anomaly?
by I0 (Priest) on Feb 19, 2002 at 23:07 UTC
    In base 10, or any base equal to 2 modulo 4, round to even is preferred.
    In a base equal to 0 modulo 4, round to odd would be preferred.