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)

public static double Round(
	double a
)

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.


using System;

public class Example
{
   private static System.Windows.Controls.TextBlock outputBlock;

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      Example.outputBlock = outputBlock;

      double value = 11.1;
      for (int ctr = 0; ctr <= 5; ctr++)    
         value = RoundValueAndAdd(value);

      outputBlock.Text += Environment.NewLine;

      value = 11.5;
      RoundValueAndAdd(value);
   }

   private static double RoundValueAndAdd(double value)
   {
      outputBlock.Text += String.Format("{0} --> {1}", value, Math.Round(value)) + Environment.NewLine;
      return value + .1;
   }
}
// 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.


using System;

class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      outputBlock.Text += "Classic Math.Round in CSharp" + "\n";
      outputBlock.Text += Math.Round(4.4) + "\n"; // 4
      outputBlock.Text += Math.Round(4.5) + "\n"; // 4
      outputBlock.Text += Math.Round(4.6) + "\n"; // 5
      outputBlock.Text += Math.Round(5.5) + "\n"; // 6
   }
}


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


/// <summary>
/// The following class represents simple functionality of the trapezoid.
/// </summary>
class Example
{
   private double m_longBase;
   private double m_shortBase;
   private double m_leftLeg;
   private double m_rightLeg;

   public Example(double longbase, double shortbase, double leftLeg, double rightLeg)
   {
      m_longBase = Math.Abs(longbase);
      m_shortBase = Math.Abs(shortbase);
      m_leftLeg = Math.Abs(leftLeg);
      m_rightLeg = Math.Abs(rightLeg);
   }

   private double GetRightSmallBase()
   {
      return (Math.Pow(m_rightLeg, 2.0) - Math.Pow(m_leftLeg, 2.0) + Math.Pow(m_longBase, 2.0) + Math.Pow(m_shortBase, 2.0) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase));
   }

   public double GetHeight()
   {
      double x = GetRightSmallBase();
      return Math.Sqrt(Math.Pow(m_rightLeg, 2.0) - Math.Pow(x, 2.0));
   }

   public double GetSquare()
   {
      return GetHeight() * m_longBase / 2.0;
   }

   public double GetLeftBaseRadianAngle()
   {
      double sinX = GetHeight() / m_leftLeg;
      return Math.Round(Math.Asin(sinX), 2);
   }

   public double GetRightBaseRadianAngle()
   {
      double x = GetRightSmallBase();
      double cosX = (Math.Pow(m_rightLeg, 2.0) + Math.Pow(x, 2.0) - Math.Pow(GetHeight(), 2.0)) / (2 * x * m_rightLeg);
      return Math.Round(Math.Acos(cosX), 2);
   }

   public double GetLeftBaseDegreeAngle()
   {
      double x = GetLeftBaseRadianAngle() * 180 / Math.PI;
      return Math.Round(x, 2);
   }

   public double GetRightBaseDegreeAngle()
   {
      double x = GetRightBaseRadianAngle() * 180 / Math.PI;
      return Math.Round(x, 2);
   }

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      Example trpz = new Example(20.0, 10.0, 8.0, 6.0);
      outputBlock.Text += String.Format("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0") + "\n";
      double h = trpz.GetHeight();
      outputBlock.Text += "Trapezoid height is: " + h.ToString() + "\n";
      double dxR = trpz.GetLeftBaseRadianAngle();
      outputBlock.Text += "Trapezoid left base angle is: " + dxR.ToString() + " Radians" + "\n";
      double dyR = trpz.GetRightBaseRadianAngle();
      outputBlock.Text += "Trapezoid right base angle is: " + dyR.ToString() + " Radians" + "\n";
      double dxD = trpz.GetLeftBaseDegreeAngle();
      outputBlock.Text += "Trapezoid left base angle is: " + dxD.ToString() + " Degrees" + "\n";
      double dyD = trpz.GetRightBaseDegreeAngle();
      outputBlock.Text += "Trapezoid left base angle is: " + dyD.ToString() + " Degrees" + "\n";
   }
}


Windows Phone OS

Supported in: 8.1, 8.0, 7.1, 7.0

Windows Phone

Show:
© 2016 Microsoft