Tuesday, May 13, 2014

Coldfusion Rounding Functions

Here is some code to show the differences between the various rounding and related function in coldfusion.  The results below are from Coldfusion 10.  I made use of the Rounding Wikipedia article to help explain, in more technical terms, the differences between the functions.






In the results below you can see that we are testing a range of numbers from -2 to 2.  I am calling each function with each of the set of numbers.  For NumberFormat I am using the mask '0' to get the affect of rounding to the decimal place.


Number Round Int Ceiling Fix NumberFormat
-2 -2 -2 -2 -2 -2
-1.9 -2 -2 -1 -1 -2
-1.8 -2 -2 -1 -1 -2
-1.7 -2 -2 -1 -1 -2
-1.6 -2 -2 -1 -1 -2
-1.5 -1 -2 -1 -1 -2
-1.4 -1 -2 -1 -1 -1
-1.3 -1 -2 -1 -1 -1
-1.2 -1 -2 -1 -1 -1
-1.1 -1 -2 -1 -1 -1
-1 -1 -1 -1 -1 -1
-0.9 -1 -1 0 0 -1
-0.8 -1 -1 0 0 -1
-0.7 -1 -1 0 0 -1
-0.6 -1 -1 0 0 -1
-0.5 0 -1 0 0 -1
-0.4 0 -1 0 0 -0
-0.3 0 -1 0 0 -0
-0.2 0 -1 0 0 -0
-0.1 0 -1 0 0 -0
0 0 0 0 0 0
0.1 0 0 1 0 0
0.2 0 0 1 0 0
0.3 0 0 1 0 0
0.4 0 0 1 0 0
0.5 1 0 1 0 1
0.6 1 0 1 0 1
0.7 1 0 1 0 1
0.8 1 0 1 0 1
0.9 1 0 1 0 1
1 1 1 1 1 1
1.1 1 1 2 1 1
1.2 1 1 2 1 1
1.3 1 1 2 1 1
1.4 1 1 2 1 1
1.5 2 1 2 1 2
1.6 2 1 2 1 2
1.7 2 1 2 1 2
1.8 2 1 2 1 2
1.9 2 1 2 1 2
2 2 2 2 2 2

Round

The Round function seems to work as expected, except possibly for the -0.5 and -1.5 values.  These are rounded to 0 and -1 respectively.  The Round function appears to be using the Round Half Up rounding rule.  Up always being in the positive direction.

Int

Int always rounds down to the nearest integer.  This is sometimes known as rounding towards minus infinity.  In other languages this is sometimes called the floor function.  Coldfusion has a Ceiling function, but no floor function.

Ceiling

Ceiling always rounds up to the nearest integer.  This is sometimes known as rounding towards plus infinity.

Fix

Fix drops the numbers after the decimal place.  This gives the same result as rounding towards zero.

NumberFormat

NumberFormat isn't really a rounding function, but it does appear to follow some set of rounding rules when used in the way that I have shown here.  It appears to be producing the same results as rounding half away from zero.  I think what may actually be happening is that it is ignoring the sign and using the same method that the round function uses.

I hope this is helpful information for someone out there.  The Coldfusion documentation was not always clear about what results you should expect when running these functions, so it is nice to have a reference like this.

I have signed up to be able to edit the documentation so I may make some changes there as well.


No comments:

Post a Comment

Coding

  I'm not sure where I heard this, and it wasn't worded this way, but it helps to think about coding this way. Basically, any progra...