Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

Round Up A Number to the Greatest 10s Place

0.00/5 (No votes)
24 Jul 2014CPOL 11.9K   33  
How to round up a number to the greatest 10s place

Recently, we faced a situation in which we need to round up a number to the greatest 10s place.

For example: we needed to round up a number as follows:

  • 1023     -> 2000
  • 37911   -> 40000
  • 912345 -> 1000000

First, we checked Math.Round(). But it didn’t solve our problem. Math.Round() supports only rounding a value to the nearest integer or to the specified number of fractional digits. On further checking, we come up with a solution by using Math.Ceiling() method.

Math.Ceiling() returns the smallest integral value that is greater than or equal to the specified double-precision floating-point number.

For example:

  • Math.Ceiling(7.3)   -> 8
  • Math.Ceiling(7.64) -> 8
  • Math.Ceiling(0.12) -> 1

Below is the solution we came up with:

C#
decimal[] values = { 1023, 37911, 23000, 1234, 912345 };
foreach (var value in values) {
//// get the length of the 10s places;
var length = value.ToString().Length - 1;
//// using Math.Pow() calculate the power of 10s
var power = Math.Pow(10, (double)length);
//// var roundadValue = Math.Ceiling(1023 / 1000) * 1000;
var roundadValue = Math.Ceiling(value / (decimal)power) * (decimal)power;

Console.WriteLine("Value:{0} Rounded Value:{1}", value, roundadValue); 
}

Math.Ceiling() Results

The Logic

C#
Math.Ceiling(value / (decimal)power) * (decimal)power;
var roundadValue = Math.Ceiling(1023 / 1000) * 1000;

So, for any number, first calculate the power of 10s and then use it for the above calculation to get the results.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)