• Status: Solved
• Priority: Medium
• Security: Public
• Views: 269

Rounding

i need to be able to round down and round up (a number of course). any know how?
0
CyberAccess
1 Solution

Use the Round() function!

Debug.Print Round(3.3)
Debug.Print Round(3.6)
Debug.Print Round(3.678,2)
0

Commented:
Sounds too easy :)
0

Commented:
be aware the the Round function uses "Banker's Rounding":

If a Value is EXACTLY .5, then if the rounding will be to the EVEN whole Number - 2.5 will ROUND Down to 2, 3.5 will ROUND Up to 4.

Arthur Wood
0

Senior .Net ConsultantCommented:
One thing for sure, do not use the Format function to round numbers. To know more on this subject, have a look at http://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=visualbasic&qid=20311047
0

Commented:
Be aware that the VB Round function, while more accurate, is not acceptable by the IRS and many businesses will complain about it.  Here's the function I use... it's crude but effective:

Public Function fc_spRound(ac_Amount As Currency, al_Places As ppRound) As Currency
If ac_Amount < 0 Then
Select Case al_Places

Case ppOneCent
fc_spRound = Fix((ac_Amount - 0.005) * 100) / 100

Case ppFiveCents
fc_spRound = Fix((ac_Amount - 0.025) * 20) / 20

Case ppDollar
fc_spRound = Fix(ac_Amount - 0.5)

Case ppTruncateToCents
fc_spRound = Fix(ac_Amount * 100) / 100

Case ppTruncateToDollars
fc_spRound = Fix(ac_Amount)

End Select

Else
Select Case al_Places

Case ppOneCent
fc_spRound = Fix((ac_Amount + 0.005) * 100) / 100

Case ppFiveCents
fc_spRound = Fix((ac_Amount + 0.025) * 20) / 20

Case ppDollar
fc_spRound = Fix(ac_Amount + 0.5)

Case ppTruncateToCents
fc_spRound = Fix(ac_Amount * 100) / 100

Case ppTruncateToDollars
fc_spRound = Fix(ac_Amount)

End Select
End If
End Function
0

Commented:
Here is a link to more than you ever wanted to know about rounding in VB:

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q196652&SD=MSKB&
0

Commented:
I also crossed this problem, you can use my function :

x : is the number you want to apply round
n : number of digits to keep

Private Function NewRound(x As Double, n As Integer) As Double
Dim factor As Double, y As Double

factor = 10 ^ n
y = x * factor + Sgn(x) * 0.5
NewRound = Fix(y) / factor
End Function
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.