static int Numdecimals = 2;
static bool Displayerrors = false;
static decimal Origvalue;
static double Doublevalue;
static double Badrounding;
static double Goodrounding;
static int Totalcount = 0;
static int icounter = (int)Math.Pow(10,(Numdecimals));
public static void Main()
for (decimal Rawstart = StartAt; Rawstart<EndAt; Rawstart++)
for (decimal i = 0; i<icounter; i++)
Origvalue = (decimal) ((.5/(double) icounter)+(double) Rawstart+(double) i/((double) icounter));
Doublevalue = (double)(Origvalue);
Badrounding = (double) Math.Round(Doublevalue, Numdecimals, System.MidpointRounding.AwayFromZero);
Goodrounding = (double) Math.Round(Origvalue, Numdecimals, System.MidpointRounding.AwayFromZero);
if (Badrounding != Goodrounding)
Console.WriteLine("{0} --> {1}", Origvalue,Badrounding);
Console.WriteLine("All numbers with {0} decimals from {1}. to {2}. rounded to {3} decimals --> {4}% bad roundings", Numdecimals+1,StartAt,EndAt,Numdecimals,10 * (Math.Round((double) Badcount/(double)Totalcount,3,System.MidpointRounding.AwayFromZero))) ;