Re: Problem With Round Function



Be careful trying to use floating point for comparisions such as <>= in if
statements due to this problem and also the possibilty of a different result
in VB.Net 2005. I read where they are improving accuracy of floating point
functions in VB.Net 2005. Exactly what this means I don't know but could
cause weird problems in if statements using floating point results.

"Ronald W. Roberts" wrote:

> Ronald W. Roberts wrote:
>
> > I'm having a problem understanding the Round function. Below are
> > quotes from two
> > books on VB.NET. The first book shows examples with one argument and
> > how it
> > rounds. The second book something different.
> >
> > Programming Microsoft Windows with Microsoft Visual Basic.NET
> > "The Round method with a single argument return the whole number nearest
> > to the argument. If the argument to Round is midway between two whole
> > numbers,
> > the return value is the nearest even number."
> >
> > An Introduction to Programming Using Microsoft Visual Basil.NET
> > Rules of Rounding
> > "A number with a decimal potion greater than or equal to .05 is
> > rounded up and a
> > number with a decimal portion less than .5 is rounded down. When the
> > decimal
> > portion is exactly 0.5, an odd number is rounded up and an even number
> > remains
> > the same."
> >
> > 1 Argument
> > dblAnswer = Math.Round(dblNum)
> > Num Answer
> > 9.5 10
> > 8.5 8
> > 7.5 8
> > 6.5 6
> > 5.5 6
> > 4.5 4
> > 3.5 4
> > 2.5 2
> > 1.5 2
> > 0.5 0
> >
> > In the above examples both books "rounds to the nearest even number"
> > and "an odd number is rounded up and an even number remains the same.",
> > I understand.
> >
> > 2 Arguments
> > dblAnswer = Math.Round(dblNum, intDecPt)
> >
> > Num DecPt Answer
> > 9.5 1 9.5
> > 8.5 1 8.5
> > 7.5 1 7.5
> > 6.5 1 6.5
> > 5.5 1 5.5
> > 4.5 1 4.5
> > 3.5 1 3.5
> > 2.5 1 2.5
> > 1.5 1 1.5
> > 0.5 1 0.5
> >
> > Num DecPt Answer
> > 9.55 1 9.6
> > 8.55 1 8.6
> > 7.55 1 7.6
> > 6.55 1 6.6
> > 5.55 1 5.6
> > 4.55 1 4.6
> > 3.55 1 3.5
> > 2.55 1 2.5
> > 1.55 1 1.5
> > 0.55 1 0.6
> >
> > The first example using 2 arguments I understand.
> > But in the second example using 2 arguments, I don't understand why
> > 1.55, 2.55, and 3.55
> > didn't round to .6
> >
> > This is the code I used.
> > Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
> > System.EventArgs) Handles Button1.Click
> > Dim dblNum As Single
> > Dim dblAnswer As Single
> > Dim IntDecPt As Integer
> > Dim strString As String
> > Dim x As Integer
> >
> > strString = Me.TextBox1.Text
> > x = strString.IndexOf(",")
> > If x = -1 Then
> > dblNum = Val(strString)
> > dblAnswer = Math.Round(dblNum)
> > Else
> > dblNum = Val(strString.Substring(0, x))
> > IntDecPt = Val(strString.Substring(x + 1, 1))
> > dblAnswer = Math.Round(dblNum, IntDecPt)
> > End If
> > Me.Label1.Text = dblAnswer
> > End Sub
> >
> >
> > Ron
> >
> Thanks to all who replied.
> I felt like I was standing in the woods and couldnt't see the trees.
> All of the replies really help to clear it up.
>
> Thanks again,
> Ron
>
> --
> Ronald W. Roberts
> Roberts Communication
> rwr@xxxxxxxxxx
>
>
.


Loading