public static class Program
public static double RoundToSignificantDigits(this double value, int digits)
if (value == 0.0d || double.IsInfinity(value) || double.IsNaN(value))
double scale = Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(value))) + 1);
return scale*Math.Round(value/scale, digits);
public static void RunTest(double value, int num_digits)
double rounded_double = RoundToSignificantDigits(value, num_digits);
Console.WriteLine("Double : Value {0}, Rounded to {2} digits = {1}", value, rounded_double, num_digits);
public static void Main()