Round Method (Double)

Math.Round Method (Double)

[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]

Rounds a double-precision floating-point value to the nearest integral value.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

'Declaration
Public Shared Function Round ( _
	a As Double _
) As Double

Parameters

a
Type: System.Double
A double-precision floating-point number to be rounded.

Return Value

Type: System.Double
The integer nearest a. If the fractional component of a is halfway between two integers, one of which is even and the other odd, then the even number is returned. Note that the method returns a Double type rather than an integral type.

This method is equivalent to calling the Round method with a mode argument of MidpointRounding.ToEven. The behavior of this method follows IEEE Standard 754, section 4. This kind of rounding is sometimes called rounding to nearest, or banker's rounding. It minimizes rounding errors that result from consistently rounding a midpoint value in a single direction.

To control the type of rounding used by the Round method, call the Math.Round(Double, MidpointRounding) overload.

If the value of a is Double.NaN, the method returns Double.NaN. If the value of a is Double.PositiveInfinity or Double.NegativeInfinity, the method returns Double.PositiveInfinity or Double.NegativeInfinity, respectively.

Notes to Callers

Because of the loss of precision that can result from representing decimal values as floating-point numbers or performing arithmetic operations on floating-point values, in some cases the Round(Double) method may not appear to round midpoint values to the nearest even integer. In the following example, because the floating-point value .1 has no finite binary representation, the first call to the Round(Double) method with a value of 11.5 returns 11 instead of 12.


Module Example
   Private outputBlock As System.Windows.Controls.TextBlock
   Public Sub Demo(outputBlock As System.Windows.Controls.TextBlock)
      Example.outputBlock = outputBlock
      Dim value As Double = 11.1
      For ctr As Integer = 0 To 5    
         value = RoundValueAndAdd(value)
      Next
      outputBlock.Text +=  Environment.NewLine

      value = 11.5
      RoundValueAndAdd(value)
   End Sub

   Private Function RoundValueAndAdd(value As Double) As Double
      outputBlock.Text += String.Format("{0} --> {1}", value, Math.Round(value)) + Environment.NewLine
      Return value + .1
   End Function   
End Module
' The example displays the following output:
'       11.1 --> 11
'       11.2 --> 11
'       11.3 --> 11
'       11.4 --> 11
'       11.5 --> 11
'       11.6 --> 12
'       
'       11.5 --> 12


The following example demonstrates rounding to nearest integer value.



Module Example

   Public Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
      outputBlock.Text &= "Classic Math.Round in Visual Basic" & vbCrLf
      outputBlock.Text &= Math.Round(4.4) & vbCrLf ' 4
      outputBlock.Text &= Math.Round(4.5) & vbCrLf ' 4
      outputBlock.Text &= Math.Round(4.6) & vbCrLf ' 5
      outputBlock.Text &= Math.Round(5.5) & vbCrLf ' 6
   End Sub

End Module


The following code sample uses Round to assist in the computation of the inner angles of a given trapezoid.


'The following class represents simple functionality of the trapezoid.
Class Example

   Private m_longBase As Double
   Private m_shortBase As Double
   Private m_leftLeg As Double
   Private m_rightLeg As Double

   Public Sub New(ByVal longbase As Double, ByVal shortbase As Double, ByVal leftLeg As Double, ByVal rightLeg As Double)
      m_longBase = Math.Abs(longbase)
      m_shortBase = Math.Abs(shortbase)
      m_leftLeg = Math.Abs(leftLeg)
      m_rightLeg = Math.Abs(rightLeg)
   End Sub

   Private Function GetRightSmallBase() As Double
      GetRightSmallBase = (Math.Pow(m_rightLeg, 2) - Math.Pow(m_leftLeg, 2) + Math.Pow(m_longBase, 2) + Math.Pow(m_shortBase, 2) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase))
   End Function

   Public Function GetHeight() As Double
      Dim x As Double = GetRightSmallBase()
      GetHeight = Math.Sqrt(Math.Pow(m_rightLeg, 2) - Math.Pow(x, 2))
   End Function

   Public Function GetSquare() As Double
      GetSquare = GetHeight() * m_longBase / 2
   End Function

   Public Function GetLeftBaseRadianAngle() As Double
      Dim sinX As Double = GetHeight() / m_leftLeg
      GetLeftBaseRadianAngle = Math.Round(Math.Asin(sinX), 2)
   End Function

   Public Function GetRightBaseRadianAngle() As Double
      Dim x As Double = GetRightSmallBase()
      Dim cosX As Double = (Math.Pow(m_rightLeg, 2) + Math.Pow(x, 2) - Math.Pow(GetHeight(), 2)) / (2 * x * m_rightLeg)
      GetRightBaseRadianAngle = Math.Round(Math.Acos(cosX), 2)
   End Function

   Public Function GetLeftBaseDegreeAngle() As Double
      Dim x As Double = GetLeftBaseRadianAngle() * 180 / Math.PI
      GetLeftBaseDegreeAngle = Math.Round(x, 2)
   End Function

   Public Function GetRightBaseDegreeAngle() As Double
      Dim x As Double = GetRightBaseRadianAngle() * 180 / Math.PI
      GetRightBaseDegreeAngle = Math.Round(x, 2)
   End Function

   Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
      Dim trpz As Example = New Example(20, 10, 8, 6)
      outputBlock.Text += String.Format("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0") & vbCrLf
      Dim h As Double = trpz.GetHeight()
      outputBlock.Text &= "Trapezoid height is: " + h.ToString() & vbCrLf
      Dim dxR As Double = trpz.GetLeftBaseRadianAngle()
      outputBlock.Text &= "Trapezoid left base angle is: " + dxR.ToString() + " Radians" & vbCrLf
      Dim dyR As Double = trpz.GetRightBaseRadianAngle()
      outputBlock.Text &= "Trapezoid right base angle is: " + dyR.ToString() + " Radians" & vbCrLf
      Dim dxD As Double = trpz.GetLeftBaseDegreeAngle()
      outputBlock.Text &= "Trapezoid left base angle is: " + dxD.ToString() + " Degrees" & vbCrLf
      Dim dyD As Double = trpz.GetRightBaseDegreeAngle()
      outputBlock.Text &= "Trapezoid left base angle is: " + dyD.ToString() + " Degrees" & vbCrLf
   End Sub

End Class



Windows Phone OS

Supported in: 8.1, 8.0, 7.1, 7.0

Windows Phone

Show:
© 2017 Microsoft