# Significant Figures Formatting.00

I wrote this for an SO question on formatting numbers to specific quantities of significant figures (after all, ), anyway, all critiques welcome.

It's pretty easy to use, FormatSignificantFigures(0.123, 2) should return 0.12; FormatSignificantFigures(0.123, 5) should return 0.12300; FormatSignificantFigures(0.123456, 5) should return 0.12346, etc.

public static string FormatSignificantFigures(double number, int figures)
{
int e = 0;

while (number >= 10.0)
{
e += 1;
number /= 10;
}

while (number < 1.0)
{
e -= 1;
number *= 10;
}

figures--;

number = Math.Round(number, figures);

figures += 0 - e;
while (e > 0)
{
number *= 10;
e -= 1;
}

while (e < 0)
{
number /= 10;
e += 1;
}

if (figures < 0)
{
figures = 0;
}

return number.ToString($"f{figures}"); }  ## 1 Answer int e = 0;  You're initializing e to default(int), which is redundant. This would be enough: int e;  I'm not quite sure why you're incrementing e like this: while (number >= 10.0) { e += 1; number /= 10; }  Why not just e++;? And same thing here: while (e > 0) { number *= 10; e -= 1; }  There's e--; to decrement. But you know this already: figures--;  Why? Why are you using both -= 1 and -- in the same method? figures += 0 - e;  Looks like a pretty convoluted way to do figures -= e;. And then we get to the return value... return number.ToString($"f{figures}");


You're using C# 6.0 string interpolation here. A format string. The SO question you linked to has an accepted answer that uses a format string to do all the work: it seems string.Format("{0:G10}", number) would do the formatting part just right - I'd parameterize the length by making a method that builds a format string from the parameter (something like "{0:G" + digits + "}"), and uses that format string to return the formatted string.

I think it would be easier to read and to follow, than the whole logic you got there.

Or, don't use a format string. IMO using a formatted string here defeats the purpose of reinventing the wheel.

• Damn, I must have been really tired to make that many mistakes...lol Although I wrote this long before the other SO answer was posted, which is why I used f instead of G. Sep 10, 2015 at 18:37