# Rounding Whole numbers

I'm having a hard time rounding. I pull a quantity from a stored procedure and need to round this number up. It will be used as the MaximumScale number for a Excel chart. I never know legth (number of digits it will be) examples:

2300 needs to be 2500
2500 needs to be 3000
234000 needs to be 250000 and so forth.
Been trying to use Math.Ceiling and Math.Floor.

Math.Ceiling(Qty / Num) * num
But not sure how to determine num or is there a better way.
###### Who is Participating?

Ok so .net ceiling is different, ny bad....
Use

Dim Answer = math.Round((Qty+1)/(5*10^LenFactor)) * (5*10^LenFactor)

Me.thinks
0

Commented:
Hello,

Math.Round(Qty / num) * num could work for you, where num is the "rounder".

ex.

double qty = 2300;
double num = 500;
double result = Math.Round(qty / num) * num;

that would give you 2500.

I hope it is useful.

Best Regards,
Jesper
0

Author Commented:
That would probably work if I can determine what num should be. num could be 5, 50, 500, 5000, 50000 and so forth. How can I determine that number?
0

That dont help with the 3rd example.

num needs to be 5 * 10^( the length of qty in digits -2)

I think?

0

Very quickly in excel so you can visualise.....

0

Sooooo.....

``````Dim Qty as Double = 243000D
Dim StrQty as String = Qty.ToString("D")
Dim LenFactor as Integer = StrQty.Length() - 2

Dim Answer = math.ceiling(Qty+1,5*10^LenFactor)

Think that works but not on a machine with .net on right now.
``````
0

Author Commented:
Neilsr

I get an error for math.ceiling. doesn't except this many arguments
0

Author Commented:
OK, got part of it.

Dim Qty as int32 = spReturnNum   'Say it = 27105
dim num as int32 = (Math.Log10(Qty)) - 1
dim qt as int32 = Math.Ceiling(Qty) + (5 * 10 ^ num)

This gives me 32105 but what I really need is 32000.
The (5 * 10 ^ num) part has helped.
0

Author Commented:
Neilsr
That's very close but can round down. I never want to round down.
0

Dim Answer = math.Round((Qty+ (5*10^LenFactor) -1 ) / (5*10^LenFactor)) * (5*10^LenFactor)

0

Hmmm no, Grrrrrr
Bloody .NET!
0

Or will it..... lol

Its 01:00 here and my eyes have gone! Good luck, bed time.
0

Author Commented:
I believe what I have below is working. The (5 * 10 ^ num) part really helped
Thanks alot.

Dim Qty As Int32 = SPGetQty
Dim Num as Int32 = (Math.Log10(Qty)) - 1
Dim answer As Int32 = (Math.Round((Qty) / (5 * 10 ^ num)) * (5 * 10 ^ num))

If Qty >= answer Then
answer += 5 * 10 ^ num
End If
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.