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.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- a
- Type: System.Double
A double-precision floating-point number to be rounded.
Return Value
Type: System.DoubleThe 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 CallersBecause 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