On Dec 1, 2007 11:30 AM, tedd <tedd.sperling@xxxxxxxxx> wrote: > At 7:10 AM -0500 12/1/07, Christoph Boget wrote: > >Why does > > > >sprintf( '%.03f', 0.15250000 ) > > > >return 0.152 while > > > >sprintf( '%.03f', 0.15750000 ) > > > >return 0.158? > > > >The 4th significant digit in both cases is '5' but in the first case, it's > >rounded down but in the second case it is rounded up. Is sprintf() basing > >it's decision on the value of the 3rd significant digit? If so, why? > >Shouldn't rounding decisions be based on subsequent digits and not preceding > >ones? > > > >I am using PHP 4.3.11 > > > >thnx, > >Christoph > > > Actually, it's more accurate to use the preceding digit to determine > rounding. What you describe is "if even then round down else round > up". That's more accurate than always rounding up or always rounding > down. > > Please follow: > > When the digit is zero, no rounding takes place. > When the digit is 1 - 4, round down. > When the digit is 6 - 9, round up. > > Fine up to there -- but, if you always round up or down for 5, then > you are introducing bias. > > So, if you use the even/odd value of the preceding digit to determine > which way to round for 5, then it's more accurate. > > However, no rounding is accurate -- it's just that some methods are > less error prone. > > Here's a demo: > > http://www.webbytedd.com/bbb/rounding/ > > My rounding method doesn't always win against php's round(), but it > wins more times than not. Plus, it takes a lot of rounding to > introduce the bias I found and thus for most applications using the > round() function (always round down) will suffice. > > Cheers, > > tedd > > -- > ------- > http://sperling.com http://ancientstones.com http://earthstones.com > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > Oh, man.... I'm having flashbacks to a flame war that broke out on a SQL Server board I read related to "bankers rounding" versus "traditional rounding" and which was more "correct" or "accurate". :-) Andrew -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php