Math.Round Method (Decimal)
Rounds a decimal value to the nearest integral value.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- d
- Type: System.Decimal
A decimal number to be rounded.
Return Value
Type: System.DecimalThe integer nearest parameter d. If the fractional component of d is halfway between two integers, one of which is even and the other odd, the even number is returned. Note that this method returns a Decimal instead of an integral type.
| Exception | Condition |
|---|---|
| OverflowException |
The result is outside the range of a Decimal. |
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(Decimal) method, call the Math.Round(Decimal, MidpointRounding) overload.
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
4.5 doesn't round to 4 but to 5
Possible Rounding Error
I can't reproduce this behavior when declaring a literal value of 4.5. Do you have any code that illustrates the problem?
Note that the above code example actually illustrates the Math.Round(Double) rather than the Math.Round(Decimal) overload. (We'll replace the example in the next documentation refresh, which is currently scheduled for some time in February 2012.) The difference is significant. Although all non-integral values are subject to a loss of precision, the Double data type is more prone to a loss of precision than the Decimal data type. In the case of these types, rounding error appears to occur when the visible value of a fractional number is less than or greater than its actual displayed value. In this case, the Math.Round method may not appear to use banker's rounding. The example in the Notes to Callers section at http://msdn.microsoft.com/en-us/library/wyk4d9cy.aspx illustrates the problem. To determine the "real" value of a fractional number, call its ToString(String) method with the "R" standard numeric format string.
--Ron Petrusha
Common Language Runtime User Education
Microsoft Corporation
- 1/27/2012
- edikt
- 2/1/2012
- R Petrusha - MSFT
