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?
Neil RussellTechnical Development LeadCommented:
Ok so .net ceiling is different, ny bad....

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


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


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,
MadIceAuthor 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?
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Neil RussellTechnical Development LeadCommented:
That dont help with the 3rd example.

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

I think?

Neil RussellTechnical Development LeadCommented:
Very quickly in excel so you can visualise.....

 Formula in excel
Neil RussellTechnical Development LeadCommented:

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.

Open in new window

MadIceAuthor Commented:

I get an error for math.ceiling. doesn't except this many arguments
MadIceAuthor 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.
MadIceAuthor Commented:
That's very close but can round down. I never want to round down.
Neil RussellTechnical Development LeadCommented:
Dim Answer = math.Round((Qty+ (5*10^LenFactor) -1 ) / (5*10^LenFactor)) * (5*10^LenFactor)

Neil RussellTechnical Development LeadCommented:
Hmmm no, Grrrrrr
Bloody .NET!
Neil RussellTechnical Development LeadCommented:
Or will it..... lol

Its 01:00 here and my eyes have gone! Good luck, bed time.
MadIceAuthor 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
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.

All Courses

From novice to tech pro — start learning today.