While working on the Financial Aid Estimator project, which involves a number of calculations, I noticed that I would sometimes receive slightly inaccurate results: an “Asset Contribution” total, for example, might be off by a dollar or two.
I was confused: all of the formulas in the code were correct. And then I noticed something:
Math.Round(3.5); // Equals 4 Math.Round(4.5); // Equals 4
Intuitively, I expected
3.5 to round to
4.5 to round to
5. Apparently, this behavior is expected: by default, the .NET framework uses the
ToEven (also called “Banker’s Rounding”) approach to rounding, where the nearest even number is chosen when a number is between two integers.
You can modify this behavior by explicitly specifying the midpoint rounding behavior:
Math.Round(3.5, MidpointRounding.AwayFromZero); // Equals 4 Math.Round(4.5, MidpointRounding.AwayFromZero); // Equals 5