You need to round a number to a whole number or to a specific number of decimal places.
Solution >
To round any number to its nearest whole number, use the overloaded static Math. Round method, which takes only a single arguments:
int x = (int)Math.Round(2.5555); // x == 3
If you need to round a floating-point value to a specific number of decimal places, use the overloaded static Math.Round method, which takes two arguments:
decimal x = Math.Round(2.5555, 2); // x == 2.56
Discussion >
The Round method is easy to use; however, you need to be aware of how the rounding operation works. The Round method follows the IEEE Standard 754, section 4 standard. This means that if the number being rounded is halfway between two numbers, the Round operation will always round to the even number. An example will show what this means to you:
decimal x = Math.Round(1.5); // x == 2 decimal y = Math.Round(2.5); // y == 2
Notice that 1.5 is rounded up to the nearest even whole number and 2.5 is rounded down to the nearest even whole number. Keep this in mind when using the Round method.
See Also: See Recipe 1.1; see the “Math Class” topic in the MSDN documentation.
1.10 Different Rounding Algorithms Problem >The Math.Round method will round the value 1.5 to 2; however, the value 2.5 will also be rounded to 2 using this method. Always round to the greater number in this type of situation (e.g., round 2.5 to 3). Conversely, you might want to always round to the lesser number (e.g., round 1.5 to 1).
Solution >
Use the static Math.Floor method to always round up when a value is halfway between two whole numbers:
public static double RoundUp(double valueToRound)
{
return (Math.Floor(valueToRound + 0.5));
}
Use the following technique to always round down when a value is halfway between two whole numbers:
public static double RoundDown(double valueToRound)
{
double floorValue = Math.Floor(valueToRound); if ((valueToRound - floorValue) > .5)
{
return (floorValue + 1);
} else
{
return (floorValue);
}
}
Discussion >
The static Static.Round method rounds to the nearest even number (see Recipe 1.9 for more information). However, there are some times that you do not want to round a number in this manner. The static Math.Floor method can be used to allowfor different manners of rounding.
Note that the methods used to round numbers in this recipe do not round to a specific number of decimal points; rather, they round to the nearest whole number.
See Also: See Recipe 1.9; see the “Math Class” topic in the MSDN documentation.
 | If you've enjoyed what you've seen here, or to get more information, click on the "Buy the book!" graphic. Pick up a copy today!
Visit the O'Reilly Network http://www.oreillynet.com for more online content. |