Technical Definition of Rounding
Technical Definition of Rounding
===================
by Edward F. Moneo, 27-Nov-2007
This tutorial includes coded algorithms in Microsoft QuickBasic 4.5, and therefore the
code may not apply
to other programming languages.
The term rounding encompasses several methods for converting numbers to a lesser
precision.
Rounding methods are also referred to as rounding modes or rounding rules.
Some reasons for performing rounding are:
Converting numbers with decimals to whole numbers.
Converting numbers with three or more decimal places to dollars and cents with two
decimal places.
Converting numbers to a workable value, like PI of 3.14159265 to 3.1416.
Converting numbers to tens, hundreds, thousands, etc. for reports or charts.
Technical Definition of Rounding:
To adjust numbers to fit a format using a rounding mode.
The FORMAT determines how the rounded result appears.
Numbers with N number of decimal places, where N can be zero.
Numbers expressed as hundreds, thousands, millions, etc.
The ROUNDING MODE determines whether to round up or down, truncate,
how to handle midway digits like .5, and how to handle negative numbers.
The programmer decides on the FORMAT to be used, and performs the required
ROUNDING MODE algorithm.
Depending on the FORMAT, the programmer may need to scale the number before and
after invoking the algorithm.
ROUNDING TERMINOLOGY:
ROUND-TOWARD-ZERO:
[-Infinity] ----(negatives)----> 0 <----(positives)---- [+Infinity]
Negatives get rounded toward zero, i.e., to a greater negative number.
Positives get rounded toward zero, i.e., to a lesser positive number.
ROUND-AWAY-FROM-ZERO:
[-Infinity] <----(negatives)---- 0 ----(positives)----> [+Infinity]
Negatives get rounded away from zero, i.e., to a lesser negative number.
Positives get rounded away from zero, i.e., to a greater positive number.
ROUND-TOWARDS-POSITIVE-INFINITY:
[-Infinity] ----(negatives)----> 0 ----(positives)----> [+Infinity]
Both negative and positive numbers are rounded towards positive infinity.
Expressed with reference to zero:
Negatives get rounded toward zero, i.e., to a greater negative number.
Positives get rounded away from zero, i.e., to a greater positive number.
ROUND-TOWARDS-NEGATIVE-INFINITY:
[-Infinity] <----(negatives)---- 0 <----(positives)---- [+Infinity]
Both negative and positive numbers are rounded towards negative infinity.
Expressed with reference to zero:
Negatives get rounded away from zero, i.e., to a lesser negative number.
Positives get rounded toward zero, i.e., to a lesser positive number.
ROUNDING MODES AND ALGORITHMS:
ROUND-TOWARD-NEAREST:
You will hear Round-Toward-Nearest or Round-To-Nearest referred to as a rounding
mode,
but it is only a rounding category or generic concept, and not a precise rounding
algorithm.
Round-Toward/To-Nearest, as a concept, encompasses several actual rounding
algorithms; such as,
the symmetric and asymmetric variations of Round-Half-Up, Round-Half-Down, RoundHalf-Even, etc.
From a programming point of view, Round-Toward/To-Nearest by itself is worthless.
SYMMETRIC-ARITHMETIC-ROUNDING:
Aka Round-Half-Up-Symmetric, Half-Adjusting, Conventional Rounding.
Negative numbers, whose decimal value is greater than or equal to .5, increase
towards negative infinity. Others are truncated.
Positive numbers, whose decimal value is greater than or equal to .5, increase
towards positive infinity. Others are truncated.
This is the classic or conventional rounding mode which many of us learned in
school.
A rounding factor of .5 is added to the number to be rounded, and the fractional part
of the result is truncated.
In the case of a negative number, the same operation is performed on the absolute
value of the number.
Algorithm code:
RoundedResult = SGN(Number)*INT(ABS(Number)+.5)
An alternate method:
RoundedResult = FIX(Number+.5*SGN(Number))
Examples:
Negative Values:
-0.5 -0.3
Rounded Results:
-1
0
-2.7
-2.5
-2.3
-2.0
-1.7
-1.5
-1.3
-1.0
-0.7
-3
-3
-2
-2
-2
-2
-1
-1
-1
Positive Values:
+2.3 +2.5 +2.7
Rounded Results:
+2
+3
+3
+0.0
+0.3
+0.5
+0.7
+1.0
+1.3
+1.5
+1.7
+2.0
+1
+1
+1
+1
+2
+2
+2
ASYMMETRIC-ARITHMETIC-ROUNDING:
Aka Round-Half-Up-Asymmetric.
Both negative and positive numbers increase towards positive infinity when the
decimal value is greater than or equal to .5.
Others are truncated.
Algorithm code:
RoundedResult = INT(Number+.5)
Examples:
Negative Values:
-0.5 -0.3
Rounded Results:
0
0
-2.7
-2.5
-2.3
-2.0
-1.7
-1.5
-1.3
-1.0
-0.7
-3
-2
-2
-2
-2
-1
-1
-1
-1
Positive Values:
+2.3 +2.5 +2.7
Rounded Results:
+2
+3
+3
+0.0
+0.3
+0.5
+0.7
+1.0
+1.3
+1.5
+1.7
+2.0
+1
+1
+1
+1
+2
+2
+2
BANKERS' ROUNDING:
Negative Values:
-0.5 -0.3
Rounded Results:
0
0
-2.7
-2.5
-2.3
-2.0
-1.7
-1.5
-1.3
-1.0
-0.7
-3
-2
-2
-2
-2
-2
-1
-1
-1
Positive Values:
+2.3 +2.5 +2.7
Rounded Results:
+2
+2
+3
+0.0
+0.3
+0.5
+0.7
+1.0
+1.3
+1.5
+1.7
+2.0
+1
+1
+1
+2
+2
+2
-0.7
ROUND-CEILING:
* Rounds towards positive infinity.
Algorithm code:
if Number < 0 then
RoundedResult=FIX(Number)
else
if Number=FIX(Number) then
RoundedResult=Number
else
RoundedResult=INT(Number)+1
end if
end if
Examples:
Negative Values:
-0.5 -0.3
Rounded Results:
0
0
-2.7
-2.5
-2.3
-2.0
-1.7
-1.5
-1.3
-1.0
-2
-2
-2
-2
-1
-1
-1
-1
Positive Values:
+2.3 +2.5 +2.7
Rounded Results:
+3
+3
+3
+0.0
0
+0.3
+0.5
+0.7
+1.0
+1.3
+1.5
+1.7
+2.0
+1
+1
+1
+1
+2
+2
+2
+2
ROUND-FLOOR:
* Rounds towards negative infinity.
Algorithm code:
RoundedResult=INT(Number)
Examples:
Negative Values:
-0.5 -0.3
Rounded Results:
-1
-1
-2.7
-2.5
-2.3
-2.0
-1.7
-1.5
-1.3
-1.0
-0.7
-3
-3
-3
-2
-2
-2
-2
-1
-1
Positive Values:
+2.3 +2.5 +2.7
Rounded Results:
+2
+2
+2
+0.0
+0.3
+0.5
+0.7
+1.0
+1.3
+1.5
+1.7
+2.0
+1
+1
+1
+1
+2
ROUND-TOWARD-ZERO:
Aka Truncation.
This is the simplest rounding mode. All digits, usually the decimals,
beyond the number required are dropped. The result is a number whose
magnitude is always less than or equal to the original value.
For POSITIVE numbers, perform ROUND-FLOOR.
For NEGATIVE numbers, perform ROUND-CEILING.
Or, perform the following algorithm code:
RoundedResult=FIX(Number)
ROUND-AWAY-FROM-ZERO:
Aka Round toward infinities.
For POSITIVE numbers, perform ROUND-CEILING.
For NEGATIVE numbers, perform ROUND-FLOOR.
ROUND-UP:
When "UP" means heading towards positive infinity, perform ROUND-CEILING.
When "UP" means an absolute value heading away from zero,
perform ROUND-AWAY-FROM-ZERO.
ROUND-DOWN:
When "DOWN" means heading towards negative infinity, perform ROUNDFLOOR.
When "DOWN" means an absolute value heading towards zero,
perform ROUND-TOWARD-ZERO.
TRUNCATION:
Aka Chopping.
Discard any unwanted digits, usually any decimals.
Perform ROUND-TOWARD-ZERO.
OTHER OBSCURE ROUNDING MODES NOT DISCUSSED HERE.
Asymmetric Bankers' Rounding
Round-Half-Down, symmetric or asymmetric
Round-Half-Odd, symmetric or asymmetric
Round Half-Integer Away From Zero
Round-Alternate
Round-Random
Round-Toward-Nearest, ties away from zero.
Round-Toward-Nearest, ties toward zero.