[AccessD] Rounding with CCur conversion

Heenan, Lambert Lambert.Heenan at AIG.com
Fri May 2 08:28:53 CDT 2008


<quote>
# VB6 Round rounds 1/2 to nearest the even number (aka 'Banker's rounding')
Round(1.5) => 2
Round(2.5) => 2 !! should be 3 in 'Other people's rounding'
</quote>

The "should be 3" comment gets me. Why would anyone wish to use a rounding
method that skews the results in one direction? For once the bankers might
have it right, IMHO. By alternately rounding up and down in a systematic way
you reduce skew. Which begs the question as to why Ccur() gets it wrong...

? ccur(111.11115),ccur(1111.11115), ccur(11111.11115)
 111.1111      1111.1111     11111.1112 

? ccur(111.11105),ccur(1111.11105), ccur(11111.11105)
 111.1111      1111.111      11111.111 

Lambert 

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Gustav Brock
Sent: Friday, May 02, 2008 2:57 AM
To: accessd at databaseadvisors.com
Subject: Re: [AccessD] Rounding with CCur conversion

Hi Asger

First, this:

  CCur(111.11115)

returns here 111.1112 as expected. Don't know why you get a different
result.

Then, the CCur, CInt, CLng and CByte functions perform Banker's rounding
while Int and Fix don't.

Further, Round is known to be buggy, so avoid that for any serious purpose.

If you are interested in rounding and how to optimise this regarding speed
while still being accurate, read on here:

  http://www.xbeat.net/vbspeed/c_Round.htm 

Note that the absolutely simplest (but slowest) method to perform 100%
correct (mathematical) rounding is ... Format!

/gustav

>>> ab-mi at post3.tele.dk 02-05-2008 01:55 >>>
Hi group,

 

I just noticed that the algorithm in VB for rounding seems to be different
for the Round-function and the CCur-function.

The Round-function use "Banker's rounding", also known as "Dutch rounding".
The CCur-function behaves differently:

Round(1.11115,4) --> 1.1112

Round(11.11115,4) --> 11.1112

Round(111.11115,4) --> 111.1112

CCur(1.11115) --> 1.1112

CCur(11.11115) --> 11.1112

CCur(111.11115) --> 111.1111  ?!!

 

What's going on in the last conversion? Is this a bug or does the
CCur-function have a special algorithm?

 

TIA

Asger


--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com



More information about the AccessD mailing list