Solved

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

Posted on 2004-10-07
5
317 Views
Last Modified: 2008-02-01
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!
0
Comment
Question by:jxharding
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
5 Comments
 
LVL 25

Expert Comment

by:RonaldBiemans
ID: 12246533
Hi jxharding,

a question

24.4 -> 20
25.0 -> 30


0
 

Author Comment

by:jxharding
ID: 12246593
hi ronaldbiemans

sorry , i made a error in the heading.
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
 
LVL 3

Accepted Solution

by:
eekj earned 250 total points
ID: 12246602
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
 
LVL 6

Assisted Solution

by:zulu_11
zulu_11 earned 250 total points
ID: 12246700
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
 
LVL 6

Expert Comment

by:zulu_11
ID: 12246708
oh! and the tbNum is a text field in which i take an input of the number to test...
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: Kraeven
Introduction Remote Share is a simple remote sharing tool, enabling you to see, add and remove remote or local shares. The application is written in VB.NET targeting the .NET framework 2.0. The source code and the compiled programs have been in…
Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question