# round UP to next biggest .5 or 0, e.g. 20.3-->20.5 & 28.8-->30, am i bound to a case statement? i tried good few functions already

hi, i need help on a round function and all it needs to do is always ROUND UP to the next half.

functions i've tried:
Private Function MyRound(ByVal aNumber As Single) As Single
If aNumber < 0 Then
Return CSng(Microsoft.VisualBasic.Fix((aNumber - 0.25) * 2) / 2)
Else
Return CSng(Microsoft.VisualBasic.Fix((aNumber + 0.25) * 2) / 2)
End If
End Function

Public Function Round5(ByVal d As Double) As Double
Return Math.Round(d * 2) / 2
End Function

am i bound to making a case statement, cause id absolutely learn nothing from it.
thanks!
###### Who is Participating?

Commented:
Dim d As Double = 20.3
MsgBox((Math.Round(Math.Round(d * 2), 0)) / 2.ToString)   'Displays 20.5

Dim e As Double = 28.8
MsgBox((Math.Round(Math.Round(e * 2), 0)) / 2.ToString)   'Displays 29
0

Commented:
Hi jxharding,

a question

24.4 -> 20
25.0 -> 30

0

Author Commented:
hi ronaldbiemans

it only needs to update to the next half, "28.8-->30" should be 28.8-->29.0
thus if the first decimal place is bigger than 0 and smaller than 5, the first decimal place must then be .5
else
if the first decimal is bigger than 5, then the non decimal must +1 and, the decimal must be .0.
thanks!

0

Commented:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim dbnum As Double
dbnum = dbnum.Parse(tbNum.Text)
If Math.Round(dbnum) < dbnum Then
dbnum = Math.Round(dbnum) + 0.5
Else
dbnum = Math.Round(dbnum)
End If
MsgBox(dbnum)
End Sub

i tested the above function for the following

28.1 - 28.5 --> 28.5
28.6 - 28.9 --> 29

hope this helps

Zulu
0

Commented:
oh! and the tbNum is a text field in which i take an input of the number to test...
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.