Archive for March, 2014

.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.