Bankers Rounding in Math.Round Method
What would be the output of the following
program?
Console.Write(Math.Round(-0.5).ToString() + “~”);
Console.Write(Math.Round(0.5).ToString()+
“~”);
Console.Write(Math.Round(1.5).ToString()+ “~”);
Console.Write(Math.Round(2.5).ToString()+
“~”);
If you think the answer is 0~0~2~3~ then you are wrong. The
actual answer is 0~0~2~2~.
And this is no compiler or runtime bug. This is because Dot net
framework’s Math class uses Banker’s rounding to round things. According to the
banker’s rounding the 0.5 number are rounded to the nearest even number. 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.
This can lead to some unexpected bugs in financial calculations based on the more well-known Round-Half-Up rounding. To control the type of rounding used by the Round(Decimal) method, call the Math.Round(Decimal, MidpointRounding) overload.
Vikram