.NET Math.Round() #EPICFAIL

Consider this: you have a number, say 392.865, and you want to round that number to two decimal places. The resulting value should be 392.87, right?

Well… well, yeah… let me just gather my breath for a second here…

If you’re using the .NET framework’s Math.Round() method then boy do I have a surprise for you! The result of Math.Round(392.865, 2) will be 392.86.

This is because .NET uses “banker’s rounding” by default.

You think I’m joking don’t you?

I should be joking, but I’m not… see MSDN for confirmation.

I’ve been writing .NET code for 11 years and I never knew about this until today. I wonder how many calculations (not just mine, but everyone’s around the world) have been and will continue to be incorrect because of this default behavior?

You have been warned.


Comment are closed.